Merge branch 'dev' into push-notifications

This commit is contained in:
nielsandriesse 2020-09-15 16:33:02 +10:00
commit 5c2f570277
158 changed files with 2009 additions and 1312 deletions

View File

@ -342,7 +342,8 @@
<activity
android:name="org.thoughtcrime.securesms.PassphrasePromptActivity"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
android:launchMode="singleTask" />
android:launchMode="singleTask"
android:theme="@style/Theme.Session.DayNight.NoActionBar"/>
<activity
android:name="org.thoughtcrime.securesms.NewConversationActivity"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"

View File

@ -1,16 +1,15 @@
import java.security.MessageDigest
buildscript {
ext.kotlin_version = "1.3.31"
ext.kotlin_version = "1.4.0"
ext.kovenant_version = "3.3.0"
repositories {
mavenLocal()
google()
mavenCentral()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:3.4.1"
classpath "com.android.tools.build:gradle:4.0.1"
classpath files('libs/gradle-witness.jar')
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.google.gms:google-services:4.3.3"
@ -18,8 +17,8 @@ buildscript {
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'witness'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.gms.google-services'
@ -73,14 +72,15 @@ configurations.all {
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.android.material:material:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
@ -89,7 +89,6 @@ dependencies {
exclude group: 'com.google.firebase', module: 'firebase-analytics'
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
}
implementation 'com.google.android.exoplayer:exoplayer-core:2.9.1'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.1'
implementation 'org.conscrypt:conscrypt-android:2.0.0'
@ -141,28 +140,6 @@ dependencies {
exclude group: 'com.fasterxml.jackson.core'
exclude group: 'org.freemarker'
}
testImplementation 'junit:junit:4.12'
testImplementation 'org.assertj:assertj-core:3.11.1'
testImplementation 'org.mockito:mockito-core:1.9.5'
testImplementation 'org.powermock:powermock-api-mockito:1.6.1'
testImplementation 'org.powermock:powermock-module-junit4:1.6.1'
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1'
testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1'
testImplementation 'androidx.test:core:1.3.0-rc03'
androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestImplementation ('org.assertj:assertj-core:1.7.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
androidTestImplementation ('com.squareup.assertj:assertj-android:1.1.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
exclude group: 'com.android.support', module: 'support-annotations'
}
testImplementation 'org.robolectric:robolectric:4.2'
testImplementation 'org.robolectric:shadows-multidex:4.2'
// Loki
// Local:
implementation "org.whispersystems:signal-service-android:2.13.2" // Run ./gradlew install from session-android-service to install
@ -180,10 +157,32 @@ dependencies {
implementation "com.github.tbruyelle:rxpermissions:0.10.2"
implementation "com.github.ybq:Android-SpinKit:1.4.0"
implementation "com.opencsv:opencsv:4.6"
testImplementation 'junit:junit:4.12'
testImplementation 'org.assertj:assertj-core:3.11.1'
testImplementation 'org.mockito:mockito-core:1.9.5'
testImplementation 'org.powermock:powermock-api-mockito:1.6.1'
testImplementation 'org.powermock:powermock-module-junit4:1.6.1'
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1'
testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1'
testImplementation 'androidx.test:core:1.3.0'
androidTestImplementation 'androidx.multidex:multidex:2.0.1'
androidTestImplementation 'androidx.multidex:multidex-instrumentation:2.0.0'
androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestImplementation ('org.assertj:assertj-core:1.7.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
androidTestImplementation ('com.squareup.assertj:assertj-android:1.1.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
exclude group: 'com.android.support', module: 'support-annotations'
}
testImplementation 'org.robolectric:robolectric:4.2'
testImplementation 'org.robolectric:shadows-multidex:4.2'
}
def canonicalVersionCode = 84
def canonicalVersionName = "1.5.0"
def canonicalVersionCode = 95
def canonicalVersionName = "1.5.3"
def postFixSize = 10
def abiPostFix = ['armeabi-v7a' : 1,
@ -208,9 +207,10 @@ android {
minSdkVersion 21
targetSdkVersion 29
multiDexEnabled true // Even though we're running API 21+, this is still needed for release builds
vectorDrawables.useSupportLibrary = true
project.ext.set("archivesBaseName", "Signal")
project.ext.set("archivesBaseName", "session")
buildConfigField "long", "BUILD_TIMESTAMP", getLastCommitTimestamp() + "L"
buildConfigField "String", "SIGNAL_URL", "\"\""
@ -349,6 +349,7 @@ android {
}
}
/*
def assembleWebsiteDescriptor = { variant, file ->
if (file.exists()) {
MessageDigest md = MessageDigest.getInstance("SHA-256")
@ -372,7 +373,7 @@ def assembleWebsiteDescriptor = { variant, file ->
descriptorFile.write(descriptor)
}
}
/*
def signProductionRelease = { variant ->
variant.outputs.collect { output ->
String apkName = output.outputFile.name

View File

@ -5,5 +5,5 @@ repositories {
}
dependencies {
compile 'com.android.tools.build:apksig:3.3.2'
implementation 'com.android.tools.build:apksig:4.0.1'
}

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 681 B

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/>
</vector>

View File

@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/unimportant" />
<solid android:color="@color/profile_picture_background" />
<corners android:radius="38dp" />

View File

@ -7,5 +7,5 @@
<corners android:radius="38dp" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/border" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/profile_picture_border" />
</shape>

View File

@ -3,9 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/unimportant" />
<solid android:color="@color/profile_picture_background" />
<corners android:radius="23dp" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/border" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/profile_picture_border" />
</shape>

View File

@ -7,5 +7,5 @@
<corners android:radius="23dp" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/border" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/profile_picture_border" />
</shape>

View File

@ -3,9 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#353535" />
<solid android:color="@color/profile_picture_background" />
<corners android:radius="23dp" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/border" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/profile_picture_border" />
</shape>

View File

@ -3,9 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/unimportant" />
<solid android:color="@color/profile_picture_background" />
<corners android:radius="18dp" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/border" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/profile_picture_border" />
</shape>

View File

@ -7,5 +7,5 @@
<corners android:radius="18dp" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/border" />
<stroke android:width="@dimen/profile_picture_border_thickness" android:color="@color/profile_picture_border" />
</shape>

View File

@ -7,5 +7,5 @@
<corners android:radius="@dimen/medium_button_corner_radius" />
<stroke android:width="@dimen/border_thickness" android:color="?colorAccent" />
<stroke android:width="@dimen/border_thickness" android:color="@color/accent" />
</shape>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
@ -30,7 +31,7 @@
android:textColor="@color/text"
android:text="There are two ways Session can notify you of new messages." />
<LinearLayout
<org.thoughtcrime.securesms.loki.views.PNModeView
android:id="@+id/fcmOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -66,9 +67,9 @@
android:textStyle="bold"
android:text="@string/activity_pn_mode_recommended_option_tag" />
</LinearLayout>
</org.thoughtcrime.securesms.loki.views.PNModeView>
<LinearLayout
<org.thoughtcrime.securesms.loki.views.PNModeView
android:id="@+id/backgroundPollingOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -95,7 +96,7 @@
android:textColor="@color/text"
android:text="Session will occasionally check for new messages in the background. Full metadata protection is guaranteed, but message notifications will be unreliable." />
</LinearLayout>
</org.thoughtcrime.securesms.loki.views.PNModeView>
<View
android:layout_width="match_parent"

View File

@ -7,6 +7,12 @@
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<EditText
style="@style/SessionEditText"
android:id="@+id/chatURLEditText"
@ -23,7 +29,7 @@
android:layout_weight="1" />
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/joinPublicChatButton"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"

View File

@ -8,6 +8,12 @@
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<EditText
style="@style/SessionEditText"
android:id="@+id/publicKeyEditText"
@ -90,7 +96,7 @@
android:layout_weight="1" />
<Button
style="@style/Widget.Session.Button.Common.ProminentFilled"
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/createPrivateChatButton"
android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height"

View File

@ -73,7 +73,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_centerInParent="true"
app:SpinKit_Color="?android:colorControlNormal" />
app:SpinKit_Color="@android:color/white" />
</RelativeLayout>

View File

@ -14,7 +14,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:elevation="1dp"
app:contentInsetStart="0dp">
<LinearLayout
@ -65,6 +64,12 @@
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<org.thoughtcrime.securesms.loki.views.SeedReminderView
android:id="@+id/seedReminderView"
android:layout_width="match_parent"
@ -76,7 +81,8 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:clipChildren="false">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
@ -94,8 +100,8 @@
<org.thoughtcrime.securesms.loki.views.NewConversationButtonSetView
android:id="@+id/newConversationButtonSet"
android:layout_width="252dp"
android:layout_height="212dp"
android:layout_width="276dp"
android:layout_height="236dp"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true" />

View File

@ -32,7 +32,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_centerInParent="true"
app:SpinKit_Color="@color/text" />
app:SpinKit_Color="@android:color/white" />
</RelativeLayout>

View File

@ -23,7 +23,8 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="@dimen/large_spacing">
android:layout_margin="@dimen/large_spacing"
android:clipChildren="false">
<LinearLayout
android:id="@+id/pathRowsContainer"

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
@ -30,7 +31,7 @@
android:textColor="@color/text"
android:text="There are two ways Session can notify you of new messages." />
<LinearLayout
<org.thoughtcrime.securesms.loki.views.PNModeView
android:id="@+id/fcmOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -66,9 +67,9 @@
android:textStyle="bold"
android:text="@string/activity_pn_mode_recommended_option_tag" />
</LinearLayout>
</org.thoughtcrime.securesms.loki.views.PNModeView>
<LinearLayout
<org.thoughtcrime.securesms.loki.views.PNModeView
android:id="@+id/backgroundPollingOptionView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -95,7 +96,7 @@
android:textColor="@color/text"
android:text="Session will occasionally check for new messages in the background. Full metadata protection is guaranteed, but message notifications will be unreliable." />
</LinearLayout>
</org.thoughtcrime.securesms.loki.views.PNModeView>
<View
android:layout_width="match_parent"

View File

@ -248,7 +248,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_centerInParent="true"
app:SpinKit_Color="@color/text" />
app:SpinKit_Color="@android:color/white" />
</RelativeLayout>

View File

@ -20,9 +20,15 @@
android:gravity="center_vertical"
android:orientation="horizontal">
<org.thoughtcrime.securesms.loki.views.ProfilePictureView
android:id="@+id/profilePictureView"
android:layout_width="@dimen/medium_profile_picture_size"
android:layout_height="@dimen/medium_profile_picture_size" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/medium_spacing"
android:orientation="vertical">
<TextView
@ -102,6 +108,12 @@
android:indeterminate="false"
android:progress="0" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<org.thoughtcrime.securesms.loki.views.SessionRestoreBannerView
android:id="@+id/sessionRestoreBannerView"
android:layout_width="match_parent"

View File

@ -9,5 +9,5 @@
android:visibility="gone"
app:doc_titleColor="?conversation_item_sent_text_primary_color"
app:doc_captionColor="?conversation_item_sent_text_secondary_color"
app:doc_downloadButtonTint="?conversation_item_sent_download_icon_color"
app:doc_downloadButtonTint="?android:colorControlNormal"
tools:visibility="visible"/>

View File

@ -21,10 +21,12 @@
android:textSize="@dimen/medium_font_size" />
<TextView
style="@style/SessionIDTextView"
android:id="@+id/seedTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing"
android:padding="@dimen/small_spacing"
android:text="habitat kiwi amply iceberg dog nerves spiderman soft match partial awakened maximum degrees"
android:textColor="@color/text"
android:textSize="@dimen/small_font_size"
@ -70,9 +72,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing"
android:text="@string/dialog_seed_disclaimer"
android:textStyle="bold"
android:textColor="@color/text"
android:textSize="@dimen/very_small_font_size"
android:alpha="0.6"
android:textSize="10sp"
android:textAlignment="center" />
</LinearLayout>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="?android:attr/actionButtonStyle"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -25,6 +26,6 @@
android:paddingBottom="3dp"
android:paddingTop="1dp"
android:background="@color/transparent"
android:textColor="@android:color/white"
android:textColor="@color/text"
android:textSize="10sp" />
</FrameLayout>

View File

@ -9,13 +9,20 @@
app:behavior_hideable="true"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<TextView
android:id="@+id/detailsTextView"
style="@style/BottomSheetActionItem"
android:drawableStart="@drawable/ic_info_outline_white_24dp"
android:drawableTint="?attr/colorControlNormal"
android:text="@string/details" />
<TextView
android:id="@+id/blockTextView"
style="@style/BottomSheetActionItem"
android:drawableStart="?attr/menu_block_icon"
android:text="@string/RecipientPreferenceActivity_block"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<TextView
android:id="@+id/unblockTextView"
@ -23,7 +30,7 @@
android:drawableStart="?attr/menu_accept_icon"
android:text="@string/RecipientPreferenceActivity_unblock"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<TextView
android:id="@+id/deleteTextView"

View File

@ -7,6 +7,12 @@
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<EditText
style="@style/SmallSessionEditText"
android:id="@+id/chatURLEditText"

View File

@ -7,6 +7,12 @@
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<EditText
style="@style/SmallSessionEditText"
android:id="@+id/publicKeyEditText"

View File

@ -9,7 +9,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="?attr/search_background"
android:background="?android:windowBackground"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:paddingLeft="@dimen/large_spacing"
android:paddingRight="@dimen/large_spacing"
android:paddingBottom="@dimen/large_spacing"
app:behavior_hideable="true"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<org.thoughtcrime.securesms.loki.views.ProfilePictureView
android:id="@+id/profilePictureView"
android:layout_width="@dimen/large_profile_picture_size"
android:layout_height="@dimen/large_profile_picture_size"
android:layout_marginTop="@dimen/large_spacing" />
<TextView
android:id="@+id/nameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing"
android:textSize="@dimen/massive_font_size"
android:textStyle="bold"
android:textColor="@color/text"
android:text="Spiderman" />
<TextView
style="@style/SessionIDTextView"
android:id="@+id/publicKeyTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/large_font_size"
android:layout_marginTop="@dimen/large_spacing"
android:textIsSelectable="true"
android:text="05987d601943c267879be41830888066c6a024cbdc9a548d06813924bf3372ea78" />
<Button
style="@style/Widget.Session.Button.Common.ProminentOutline"
android:id="@+id/copyButton"
android:layout_width="wrap_content"
android:layout_height="@dimen/medium_button_height"
android:layout_marginTop="@dimen/medium_spacing"
android:paddingLeft="@dimen/large_spacing"
android:paddingRight="@dimen/large_spacing"
android:text="@string/copy" />
</LinearLayout>

View File

@ -4,6 +4,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:dividerHorizontal"
android:elevation="1dp" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@ -13,8 +13,7 @@
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
android:padding="10dp"
android:background="?attr/invite_background">
android:padding="10dp">
<ImageView android:id="@+id/heart"
android:layout_width="wrap_content"

View File

@ -17,7 +17,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:padding="6dp"
android:src="@drawable/ic_search_white_24dp"
android:src="@drawable/ic_baseline_search_24"
android:tint="?media_keyboard_button_color"
android:background="?selectableItemBackgroundBorderless"
android:visibility="invisible"
@ -98,7 +98,7 @@
android:tint="?media_keyboard_button_color"
android:visibility="gone"
android:background="?selectableItemBackground"
app:srcCompat="@drawable/ic_plus_24"
app:srcCompat="@drawable/ic_baseline_add_24"
app:layout_constraintBottom_toBottomOf="@id/media_keyboard_tabs"
app:layout_constraintTop_toTopOf="@id/media_keyboard_tabs"
app:layout_constraintEnd_toStartOf="@id/media_keyboard_backspace_backup"

View File

@ -33,7 +33,8 @@
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginEnd="6dp"
android:src="@drawable/ic_folder_white_48dp"/>
android:tint="@android:color/white"
android:src="@drawable/ic_baseline_folder_24"/>
<TextView
android:id="@+id/mediapicker_folder_item_title"

View File

@ -6,7 +6,8 @@
android:id="@+id/prompt_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:orientation="vertical"
tools:context="org.thoughtcrime.securesms.PassphrasePromptActivity">
<View android:id="@+id/shim"
android:layout_width="match_parent"
@ -25,7 +26,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginTop="20dp">
android:layout_alignParentTop="true">
<ImageView
android:layout_width="wrap_content"
@ -78,7 +79,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="60dp"
tools:visibility="gone">
tools:visibility="visible">
<EditText android:id="@+id/passphrase_edit"
android:layout_width="match_parent"
@ -88,7 +89,8 @@
android:layout_marginEnd="50dp"
android:singleLine="true"
android:paddingStart="10dp"
android:paddingEnd="40dp"/>
android:paddingEnd="40dp"
tools:text="password"/>
<org.thoughtcrime.securesms.components.AnimatingToggle
android:id="@+id/button_toggle"
@ -100,7 +102,7 @@
android:gravity="center">
<ImageButton android:id="@+id/passphrase_visibility"
android:src="?ic_visibility"
android:src="?ic_visibility_on"
android:background="@drawable/touch_highlight_background"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -5,6 +5,7 @@
android:layout_height="wrap_content"
android:paddingLeft="@dimen/very_large_spacing"
android:paddingRight="@dimen/very_large_spacing"
android:paddingBottom="@dimen/medium_spacing"
android:orientation="vertical">
<TextView

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:id="@+id/doubleModeImageViewContainer"

View File

@ -1252,5 +1252,184 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
<string name="prompt_passphrase_activity__tap_to_unlock">KETUK UNTUK MEMBUKA</string>
<string name="RegistrationLockDialog_reminder">Peringatan:</string>
<string name="recipient_preferences__about">Tentang</string>
<!--EOF-->
<!-- Session -->
<string name="continue_2">Lanjut</string>
<string name="copy">Salin</string>
<string name="invalid_url">URL salah</string>
<string name="copied_to_clipboard">Salin ke clipboard</string>
<string name="device_linking_failed">Gagal menyambungkan perangkat</string>
<string name="next">Selanjutnya</string>
<string name="share">Bagikan</string>
<string name="invalid_session_id">Session salah</string>
<string name="cancel">Batal</string>
<string name="your_session_id">Session ID anda</string>
<string name="activity_landing_title_2">Session anda dimulai di sini</string>
<string name="activity_landing_register_button_title">Buat Session ID</string>
<string name="activity_landing_restore_button_title">Lanjutkan Session</string>
<string name="activity_landing_link_button_title">Tautkan dengan akun</string>
<string name="activity_landing_device_unlinked_dialog_title">Sukses memutus koneksi perangkat</string>
<string name="view_fake_chat_bubble_1">Apa itu Session?</string>
<string name="view_fake_chat_bubble_2">Session adalah aplikasi pesan terenkripsi yang terdesentralisasi</string>
<string name="view_fake_chat_bubble_3">Bagaimana dengan pengumpulan informasi personal atau metadata percakapan? Bagaimana cara kerjanya?</string>
<string name="view_fake_chat_bubble_4">Menggunakan kombinasi routing yang anonim canggih dan teknologi enkripsi ujung-ke-ujung (end-to-end encryption)</string>
<string name="view_fake_chat_bubble_5">Rekan yang baik tak membiarkan rekannya menggunakan aplikasi bertukar pesan yang tak aman. Terima kasih kembali.</string>
<string name="activity_register_title">Ucapkan halo pada Session ID anda</string>
<string name="activity_register_explanation">Session ID adalah alamat unik yang bisa digunakan untuk mengontak anda. Tanpa koneksi dengan identitas asli, Session ID anda didesain bersifat anonim dan rahasia.</string>
<string name="activity_register_public_key_copied_message">Salin ke clipboard</string>
<string name="activity_restore_title">Kembalikan akun</string>
<string name="activity_restore_explanation">Masukkan kata pemulihan yang diberikan saat anda mencoba masuk ke akun</string>
<string name="activity_restore_seed_edit_text_hint">masukan kata pemulihan</string>
<string name="activity_link_device_title">Tautkan perangkat</string>
<string name="activity_link_device_enter_session_id_tab_title">Masuk ke Session ID</string>
<string name="activity_link_device_scan_qr_code_tab_title">Pindai kode QR</string>
<string name="activity_link_device_scan_qr_code_explanation">Tautkan Perangkat" di perangkat anda, kemudian pindai QR code yang muncul untuk mulai proses menautkan</string>
<string name="fragment_enter_session_id_title">Tautkan perangkat</string>
<string name="fragment_enter_session_id_explanation">Tautkan perangkat" di perangkat lain dan masuk ke Session ID anda untuk memulai proses menautkan</string>
<string name="fragment_enter_session_id_edit_text_hint">Masuk ke Session ID</string>
<string name="activity_display_name_title_2">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_explanation">Ini akan menjadi nama anda ketika menggunakan Session. Bisa merupakan nama asli, alias, atau apapun yang anda suka</string>
<string name="activity_display_name_edit_text_hint">Masukkan nama</string>
<string name="activity_display_name_display_name_missing_error">Pilih nama yang ditampilkan</string>
<string name="activity_display_name_display_name_invalid_error">Masukkan nama yang terdiri dari karakter 1-z, A-Z, 0-9, dan _</string>
<string name="activity_display_name_display_name_too_long_error">Nama yang dibuat terlalu panjang</string>
<string name="activity_pn_mode_recommended_option_tag">Direkomendasikan</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Pilih salah satu opsi</string>
<string name="activity_home_empty_state_message">Anda belum memiliki kontak</string>
<string name="activity_home_empty_state_button_title">Mulai sebuah Session</string>
<string name="activity_home_leave_group_dialog_message">Apakah anda yakin ingin meninggalkan grup ini?</string>
<string name="activity_home_leaving_group_failed_message">Tak bisa meninggalkan grup</string>
<string name="activity_home_delete_conversation_dialog_message">Apakah anda yakin ingin menghapus percakapan ini?</string>
<string name="activity_home_conversation_deleted_message">Percakapan terhapus</string>
<string name="activity_seed_title">Kata pemulihan anda</string>
<string name="activity_seed_title_2">Inilah kata pemulihan anda</string>
<string name="activity_seed_explanation">Kata pemulihan adalah kunci Session ID -- bisa digunakan untuk mengembalikan Session ID ketika anda kehilangan perangkat. Simpan kata pemulihan di tempat yang aman dan jangan berikan kepada siapapun</string>
<string name="activity_seed_reveal_button_title">Tekan untuk melihat</string>
<string name="view_seed_reminder_subtitle_1">Amankan akun anda dengan menyimpan kata pemulihan</string>
<string name="view_seed_reminder_subtitle_2">Ketuk dan tekan kata yang disensor untuk mengetahui kata pemulihan anda, lalu simpan baik-baik untuk mengamnkan Session ID anda</string>
<string name="view_seed_reminder_subtitle_3">Pastikan untuk menyimpan kata pemulihan di tempat yang aman</string>
<string name="activity_path_title">Path</string>
<string name="activity_path_explanation">Session menyembunyikan IP dengan memantulkan pesan melalui berbagai simpul layanan di jaringan Session yang terdesentralisasi. Ini adalah negara yang menjadi lokasi pesan anda dipantulkan</string>
<string name="activity_path_device_row_title">Anda</string>
<string name="activity_path_guard_node_row_title">Simpul masuk</string>
<string name="activity_path_service_node_row_title">Simpul layanan</string>
<string name="activity_path_destination_row_title">Tujuan</string>
<string name="activity_path_learn_more_button_title">Pelajari lebih lanjut</string>
<string name="activity_create_private_chat_title">Session baru</string>
<string name="activity_create_private_chat_enter_session_id_tab_title">Masukkan Session ID</string>
<string name="activity_create_private_chat_scan_qr_code_tab_title">Pindai kode QR</string>
<string name="activity_create_private_chat_scan_qr_code_explanation">Pindai kode QR pengguna lain untuk memulai Session. Kode QR bisa ditemukan dengan mengetukan gambar kode QR di pengaturan akun</string>
<string name="fragment_enter_public_key_edit_text_hint">Masukkan Session ID penerima</string>
<string name="fragment_enter_public_key_explanation">Pengguna bisa membagikan Session ID miliknya dengan masuk ke pengaturan akun dan mengetuk "Bagikan Session ID" atau dengan membagikan kode QR mereka</string>
<string name="fragment_scan_qr_code_camera_access_explanation">Session membutuhkan akses kamera untuk memindai kode QR</string>
<string name="fragment_scan_qr_code_grant_camera_access_button_title">Berikan akses kamera</string>
<string name="activity_create_closed_group_title">Grup tertutup baru</string>
<string name="activity_create_closed_group_edit_text_hint">Masukkan nama grup</string>
<string name="activity_create_closed_group_explanation">Grup tertutup maksimal berisi 10 anggota dan memiliki perlindungan privasi yang sama dengan Session antara dua pengguna</string>
<string name="activity_create_closed_group_empty_state_message">anda belum memiliki kontak</string>
<string name="activity_create_closed_group_empty_state_button_title">Mulai sebuah Session</string>
<string name="activity_create_closed_group_group_name_missing_error">Masukkan nama grup</string>
<string name="activity_create_closed_group_group_name_too_long_error">Masukkan nama grup yang lebih pendek</string>
<string name="activity_create_closed_group_not_enough_group_members_error">Pilih setidaknya 2 anggota grup</string>
<string name="activity_create_closed_group_too_many_group_members_error">Grup tertutup maksimal berisi 10 anggota</string>
<string name="activity_create_closed_group_invalid_session_id_error">Salah satu anggota di grup memiliki Session ID yang salah</string>
<string name="activity_join_public_chat_title">Gabung ke grup terbuka</string>
<string name="activity_join_public_chat_error">Tak bisa bergabung dengan grup</string>
<string name="activity_join_public_chat_enter_group_url_tab_title">Buka URL grup</string>
<string name="activity_join_public_chat_scan_qr_code_tab_title">Pindai kode QR</string>
<string name="activity_join_public_chat_scan_qr_code_explanation">Pindai kode QR grup terbuka yang ingin anda masuki</string>
<string name="fragment_enter_chat_url_edit_text_hint">Masukkan sebuah URL grup terbuka</string>
<string name="activity_settings_title">Pengaturan</string>
<string name="activity_settings_display_name_edit_text_hint">Masukkan nama</string>
<string name="activity_settings_display_name_missing_error">Pilih sebuah nama</string>
<string name="activity_settings_invalid_display_name_error">Masukkan nama yang terdiri dari karakter 1-z, A-Z, 0-9, dan _</string>
<string name="activity_settings_display_name_too_long_error">Nama yang dibuat terlalu panjang</string>
<string name="activity_settings_privacy_button_title">Privasi</string>
<string name="activity_settings_notifications_button_title">Notifikasi</string>
<string name="activity_settings_chats_button_title">Percakapan</string>
<string name="activity_settings_devices_button_title">Perangkat</string>
<string name="activity_settings_recovery_phrase_button_title">Kata pemulihan</string>
<string name="activity_settings_clear_all_data_button_title">Hapus data</string>
<string name="activity_notification_settings_title">Notifikasi</string>
<string name="activity_notification_settings_style_section_title">Gaya notifikasi</string>
<string name="activity_notification_settings_content_section_title">Isi notifikasi</string>
<string name="activity_privacy_settings_title">Privasi</string>
<string name="activity_chat_settings_title">Percakapan</string>
<string name="activity_linked_devices_title">Perangkat</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_explanation">Saat ini anda tak diperbolehkan menautkan lebih dari satu perangkat</string>
<string name="activity_linked_devices_unlinking_failed_message">Tak bisa memutus perangkat</string>
<string name="activity_linked_devices_unlinking_successful_message">Sukses memutus perangkat</string>
<string name="activity_linked_devices_linking_failed_message">Tidak bisa menautkan perangkat</string>
<string name="activity_linked_devices_empty_state_message">anda belum menautkan satupun perangkat</string>
<string name="activity_linked_devices_empty_state_button_title">tautkan perangkat (beta)</string>
<string name="preferences_notifications_strategy_category_title">Strategi notofikasi</string>
<string name="dialog_link_device_slave_mode_title_1">Menunggu otorisasi</string>
<string name="dialog_link_device_slave_mode_title_2">Menautkan perangkat diotorisasi</string>
<string name="dialog_link_device_slave_mode_explanation_1">Pastikan kata di bawah sama dengan kata yang muncul di perangkat lainnya</string>
<string name="dialog_link_device_slave_mode_explanation_2">Perangkat sukses ditautkan</string>
<string name="dialog_link_device_master_mode_title_1">Menunggu perangkat</string>
<string name="dialog_link_device_master_mode_title_2">Permintaan penautan diterima</string>
<string name="dialog_link_device_master_mode_title_3">Mengotorisasi tautan perangkat</string>
<string name="dialog_link_device_master_mode_explanation_1">Unduh Session di perangkat baru anda lalu ketuk "Tautkan ke akun yang sudah ada" di bagian bawah layar. Jika ada akun lain di perangkat baru tersebut, anda harus menghapusnya terlebih dahulu</string>
<string name="dialog_link_device_master_mode_explanation_2">Pastikan kata di bawah sama dengan kata yang muncul di perangkat lainnya</string>
<string name="dialog_link_device_master_mode_explanation_3">Mohon tunggu, tautan perangkat sedang dibuat. Proses ini mungkin berlangsung hingga beberapa menit</string>
<string name="dialog_link_device_master_mode_authorize_button_title">Otorisasi</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Ubah nama</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Putuskan koneksi dengan perangkat</string>
<string name="dialog_edit_device_name_edit_text_hint">Masukkan nama</string>
<string name="dialog_seed_title">Kata pemulihan anda</string>
<string name="dialog_seed_explanation">Ini adalah kata pemulihan anda. Gunakan untuk mengembalikan atau memindahkan Session ID anda ke perangkat lain</string>
<string name="dialog_clear_all_data_title">Hapus semua data</string>
<string name="dialog_clear_all_data_explanation">Pesan, Session, dan kontak anda akan dihapus secara permanen</string>
<string name="activity_qr_code_title">Kode QR</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">Lihat kode QR saya</string>
<string name="activity_qr_code_view_scan_qr_code_tab_title">Pindai kode QR</string>
<string name="activity_qr_code_view_scan_qr_code_explanation">Pindai kode QR pengguna lain untuk memulai percakapan</string>
<string name="fragment_view_my_qr_code_explanation">Ini adalah kode QR anda. Pengguna lain bisa memindainya untuk memulai percakapan dengan anda</string>
<string name="fragment_view_my_qr_code_share_title">Bagikan kode QR</string>
<string name="session_reset_banner_message">Apakah anda ingin mengembalikan session dengan %1$s</string>
<string name="session_reset_banner_dismiss_button_title">Batalkan</string>
<string name="session_reset_banner_restore_button_title">Kembalikan</string>
<string name="fragment_contact_selection_contacts_title">Kontak</string>
<string name="fragment_contact_selection_closed_groups_title">Grup tertutup</string>
<string name="fragment_contact_selection_open_groups_title">Grup terbuka</string>
</resources>

View File

@ -1258,5 +1258,185 @@
<string name="prompt_passphrase_activity__tap_to_unlock">タップしてロック解除</string>
<string name="RegistrationLockDialog_reminder">備忘:</string>
<string name="recipient_preferences__about">Sessionについて</string>
<!--EOF-->
<!-- Session -->
<string name="continue_2">続行する</string>
<string name="copy">コピーする</string>
<string name="invalid_url">URL が無効です</string>
<string name="copied_to_clipboard">クリップボードにコピーされました</string>
<string name="device_linking_failed">デバイスをリンクできませんでした。</string>
<string name="next"></string>
<string name="share">共有する</string>
<string name="invalid_session_id">Session ID が無効です</string>
<string name="cancel">取り消す</string>
<string name="your_session_id">あなたの Session ID</string>
<string name="activity_landing_title_2">ここから Session が始まります...</string>
<string name="activity_landing_register_button_title">Session ID を作成する</string>
<string name="activity_landing_restore_button_title">Session を続ける</string>
<string name="activity_landing_link_button_title">既存のアカウントにリンクする</string>
<string name="activity_landing_device_unlinked_dialog_title">デバイスは正常にリンク解除されました</string>
<string name="view_fake_chat_bubble_1">Session とは?</string>
<string name="view_fake_chat_bubble_2">分散型の暗号化されたメッセージングアプリです</string>
<string name="view_fake_chat_bubble_3">個人情報や会話のメタデータは収集されませんか?どのように機能しますか?</string>
<string name="view_fake_chat_bubble_4">高度な匿名ルーティングとエンドツーエンドの暗号化テクノロジーを組み合わせて使用します。</string>
<string name="view_fake_chat_bubble_5">友人は、セキュリティ侵害されたメッセンジャーを自らの友人に使用させません。どういたしまして。</string>
<string name="activity_register_title">Session ID をご紹介します</string>
<string name="activity_register_explanation">Session ID は、Session で連絡を取るために使用できる一意のアドレスです。本当のアイデンティティに関係なく、あなたの Session ID は設計上完全に匿名でプライベートです。</string>
<string name="activity_register_public_key_copied_message">クリップボードにコピーされました</string>
<string name="activity_restore_title">アカウントを復元する</string>
<string name="activity_restore_explanation">アカウントを復元するためにサインアップしたときに与えられたリカバリーフレーズを入力します。</string>
<string name="activity_restore_seed_edit_text_hint">リカバリーフレーズを入力してください</string>
<string name="activity_link_device_title">デバイスをリンクする</string>
<string name="activity_link_device_enter_session_id_tab_title">Session ID を入力してください</string>
<string name="activity_link_device_scan_qr_code_tab_title">QR コードをスキャンする</string>
<string name="activity_link_device_scan_qr_code_explanation">他のデバイスで [設定]&gt; [デバイス]&gt; [デバイスのリンク] に移動し、表示される QR コードをスキャンして、リンクプロセスを開始します。</string>
<string name="fragment_enter_session_id_title">デバイスをリンクする</string>
<string name="fragment_enter_session_id_explanation">[設定]&gt; [デバイス]&gt; [他のデバイスのデバイスをリンク] に移動し、Session ID を入力して、リンクプロセスを開始します。</string>
<string name="fragment_enter_session_id_edit_text_hint">Session ID を入力してください</string>
<string name="activity_display_name_title_2">表示名を選択してください</string>
<string name="activity_display_name_explanation">これは、Session を使用するときの名前になります。あなたの本当の名前、エイリアス、またはあなたが好きな他のものに設定することができます。</string>
<string name="activity_display_name_edit_text_hint">表示名を入力してください</string>
<string name="activity_display_name_display_name_missing_error">表示名を選択してください</string>
<string name="activity_display_name_display_name_invalid_error">AZ、AZ、0-9、_ の文字のみで構成される表示名を選択してください</string>
<string name="activity_display_name_display_name_too_long_error">短い表示名を選択してください</string>
<string name="activity_pn_mode_recommended_option_tag">オススメ</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">オプションを選択してください</string>
<string name="activity_home_empty_state_message">まだ連絡先がありません</string>
<string name="activity_home_empty_state_button_title">Session を開始する</string>
<string name="activity_home_leave_group_dialog_message">このグループを退会しますか?</string>
<string name="activity_home_leaving_group_failed_message">グループを脱退できませんでした</string>
<string name="activity_home_delete_conversation_dialog_message">この会話を削除してもよろしいですか?</string>
<string name="activity_home_conversation_deleted_message">会話を削除しました</string>
<string name="activity_seed_title">あなたのリカバリーフレーズ</string>
<string name="activity_seed_title_2">リカバリーフレーズに合致する</string>
<string name="activity_seed_explanation">リカバリーフレーズは、Session ID のマスターキーです。デバイスにアクセスできなくなった場合、これを使用して Session ID を復元できます。リカバリーフレーズを安全な場所に保管し、誰にも教えないでください。</string>
<string name="activity_seed_reveal_button_title">明らかにする</string>
<string name="view_seed_reminder_subtitle_1">リカバリーフレーズを保存してアカウントを保護する</string>
<string name="view_seed_reminder_subtitle_2">編集された単語をタップして長押ししてリカバリーフレーズを表示し、それを安全に保管して Session ID を保護します。</string>
<string name="view_seed_reminder_subtitle_3">リカバリーフレーズは安全な場所に保管してください</string>
<string name="activity_path_title">パス</string>
<string name="activity_path_explanation">Session は、Sessionの分散型ネットワークの複数のサービスードを介してメッセージをバウンスすることにより、IP を隠します。これらは、接続が現在バウンスされている国です。</string>
<string name="activity_path_device_row_title">あなた</string>
<string name="activity_path_guard_node_row_title">エントリーノード</string>
<string name="activity_path_service_node_row_title">サービスノード</string>
<string name="activity_path_destination_row_title">目的先</string>
<string name="activity_path_learn_more_button_title">詳細</string>
<string name="activity_create_private_chat_title">新しい Session</string>
<string name="activity_create_private_chat_enter_session_id_tab_title">Session ID を入力してください</string>
<string name="activity_create_private_chat_scan_qr_code_tab_title">QR コードをスキャンする</string>
<string name="activity_create_private_chat_scan_qr_code_explanation">ユーザーの QR コードをスキャンして、Session を開始します。QR コードは、アカウント設定の QR コードアイコンをタップすると見つかります。</string>
<string name="fragment_enter_public_key_edit_text_hint">受信者の Session ID を入力してください</string>
<string name="fragment_enter_public_key_explanation">ユーザーは、アカウント設定に移動して [Session ID を共有] をタップするか、QR コードを共有することで、Session ID を共有できます。</string>
<string name="fragment_scan_qr_code_camera_access_explanation">Session で QR コードをスキャンするにはカメラへのアクセスが必要です</string>
<string name="fragment_scan_qr_code_grant_camera_access_button_title">カメラへのアクセスを許可する</string>
<string name="activity_create_closed_group_title">新しいクローズドグループ</string>
<string name="activity_create_closed_group_edit_text_hint">グループ名を入力してください</string>
<string name="activity_create_closed_group_explanation">クローズドグループは最大 10 人のメンバーをサポートし、1 対 1 の Session と同じプライバシー保護を提供します。</string>
<string name="activity_create_closed_group_empty_state_message">まだ連絡先がありません</string>
<string name="activity_create_closed_group_empty_state_button_title">Session を開始する</string>
<string name="activity_create_closed_group_group_name_missing_error">グループ名を入力してください</string>
<string name="activity_create_closed_group_group_name_too_long_error">短いグループ名を入力してください</string>
<string name="activity_create_closed_group_not_enough_group_members_error">グループメンバーを少なくとも 2 人選択してください</string>
<string name="activity_create_closed_group_too_many_group_members_error">閉じたグループは 10 人を超えるメンバーを抱えることはできません</string>
<string name="activity_create_closed_group_invalid_session_id_error">グループのメンバーの 1 人の Session ID が無効です</string>
<string name="activity_join_public_chat_title">オープングループに参加する</string>
<string name="activity_join_public_chat_error">グループに参加できませんでした</string>
<string name="activity_join_public_chat_enter_group_url_tab_title">グループの URL を開く</string>
<string name="activity_join_public_chat_scan_qr_code_tab_title">QR コードをスキャンする</string>
<string name="activity_join_public_chat_scan_qr_code_explanation">参加したいオープングループの QR コードをスキャンする</string>
<string name="fragment_enter_chat_url_edit_text_hint">オープングループの URL を入力する</string>
<string name="activity_settings_title">設定</string>
<string name="activity_settings_display_name_edit_text_hint">表示名を入力してください</string>
<string name="activity_settings_display_name_missing_error">表示名を選択してください</string>
<string name="activity_settings_invalid_display_name_error">AZ、AZ、0-9、_ の文字のみで構成される表示名を選択してください</string>
<string name="activity_settings_display_name_too_long_error">短い表示名を選択してください</string>
<string name="activity_settings_privacy_button_title">プライバシー</string>
<string name="activity_settings_notifications_button_title">お知らせ</string>
<string name="activity_settings_chats_button_title">チャット</string>
<string name="activity_settings_devices_button_title">デバイス</string>
<string name="activity_settings_recovery_phrase_button_title">リカバリーフレーズ</string>
<string name="activity_settings_clear_all_data_button_title">データを消去する</string>
<string name="activity_notification_settings_title">お知らせ</string>
<string name="activity_notification_settings_style_section_title">通知スタイル</string>
<string name="activity_notification_settings_content_section_title">通知内容</string>
<string name="activity_privacy_settings_title">プライバシー</string>
<string name="activity_chat_settings_title">チャット</string>
<string name="activity_linked_devices_title">デバイス</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_title">デバイス制限に達しました</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_explanation">現在、複数のデバイスをリンクすることはできません。</string>
<string name="activity_linked_devices_unlinking_failed_message">デバイスのリンクを解除できませんでした。</string>
<string name="activity_linked_devices_unlinking_successful_message">デバイスは正常にリンク解除されました</string>
<string name="activity_linked_devices_linking_failed_message">デバイスをリンクできませんでした。</string>
<string name="activity_linked_devices_empty_state_message">まだデバイスをリンクしていません</string>
<string name="activity_linked_devices_empty_state_button_title">デバイスをリンクする(ベータ)</string>
<string name="preferences_notifications_strategy_category_title">通知戦略</string>
<string name="dialog_link_device_slave_mode_title_1">承認待ち</string>
<string name="dialog_link_device_slave_mode_title_2">承認されたデバイスリンク</string>
<string name="dialog_link_device_slave_mode_explanation_1">以下の単語が、他のデバイスに表示されている単語と一致することを確認してください。</string>
<string name="dialog_link_device_slave_mode_explanation_2">デバイスが正常にリンクされました</string>
<string name="dialog_link_device_master_mode_title_1">デバイス待ち</string>
<string name="dialog_link_device_master_mode_title_2">リンクリクエストを受け取りました</string>
<string name="dialog_link_device_master_mode_title_3">デバイスリンクの認証</string>
<string name="dialog_link_device_master_mode_explanation_1">他のデバイスでセッションをダウンロードし、ランディング画面の下部にある [既存のアカウントにリンク] をタップします。他のデバイスに既存のアカウントがある場合は、最初にそのアカウントを削除する必要があります。</string>
<string name="dialog_link_device_master_mode_explanation_2">以下の単語が、他のデバイスに表示されている単語と一致することを確認してください。</string>
<string name="dialog_link_device_master_mode_explanation_3">デバイスリンクが作成されるまでお待ちください。これには 1 分ほどかかる場合があります。</string>
<string name="dialog_link_device_master_mode_authorize_button_title">承認する</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">名前を変更する</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">デバイスのリンクを解除する</string>
<string name="dialog_edit_device_name_edit_text_hint">名前を入力する</string>
<string name="dialog_seed_title">あなたのリカバリーフレーズ</string>
<string name="dialog_seed_explanation">これはあなたのリカバリーフレーズです。これにより、Session ID を新しいデバイスに復元または移行できます。</string>
<string name="dialog_clear_all_data_title">すべてのデータを消去する</string>
<string name="dialog_clear_all_data_explanation">これにより、メッセージ、Session、連絡先が完全に削除されます。</string>
<string name="activity_qr_code_title">QR コード</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">私の QR コードを表示する</string>
<string name="activity_qr_code_view_scan_qr_code_tab_title">QR コードをスキャンする</string>
<string name="activity_qr_code_view_scan_qr_code_explanation">誰かの QR コードをスキャンして、会話を始めましょう</string>
<string name="fragment_view_my_qr_code_explanation">これはあなたの QR コードです。他のユーザーはそれをスキャンして、あなたとの Session を開始できます。</string>
<string name="fragment_view_my_qr_code_share_title">QR コードを共有する</string>
<string name="session_reset_banner_message">...%sとの Session を復元しますか?</string>
<string name="session_reset_banner_dismiss_button_title">はねつける</string>
<string name="session_reset_banner_restore_button_title">戻す</string>
<string name="fragment_contact_selection_contacts_title">連絡先</string>
<string name="fragment_contact_selection_closed_groups_title">閉じたグループ</string>
<string name="fragment_contact_selection_open_groups_title">オープングループ</string>
</resources>

View File

@ -7,6 +7,8 @@
<color name="text">#000000</color>
<color name="destructive">#f26f55</color>
<color name="unimportant">#606060</color>
<color name="profile_picture_border">#23000000</color>
<color name="profile_picture_background">#B0B0B0</color>
<color name="cell_background">#FCFCFC</color>
<color name="cell_selected">#DFDFDF</color>
<color name="navigation_bar_background">#FCFCFC</color>
@ -28,7 +30,7 @@
<color name="app_icon_background">#333132</color>
<color name="progress_bar_background">#0AFFFFFF</color>
<color name="progress_bar_background">#0A000000</color>
<color name="quote_not_found_background">#99FFFFFF</color>
</resources>

View File

@ -11,4 +11,14 @@
<item name="android:textColor">@android:color/white</item>
</style>
<style name="FakeChatViewMessageBubble.Incoming">
<item name="android:background">@drawable/fake_chat_view_incoming_message_background</item>
<item name="android:elevation">4dp</item>
</style>
<style name="FakeChatViewMessageBubble.Outgoing">
<item name="android:background">@drawable/fake_chat_view_outgoing_message_background</item>
<item name="android:elevation">4dp</item>
</style>
</resources>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<style name="Theme.Session.Light" parent="Base.Theme.Session">
<item name="android:navigationBarColor">?android:navigationBarColor</item>
@ -23,6 +23,8 @@
<item name="conversation_input_background">@drawable/compose_background_light</item>
<item name="quick_camera_icon">@drawable/ic_outline_photo_camera_24</item>
<item name="media_keyboard_button_color">@color/core_grey_60</item>
</style>
<style name="Theme.Session.DayNight" parent="Theme.Session.Light">
@ -39,8 +41,6 @@
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyleLight</item>
<item name="android:alertDialogTheme">@style/AppCompatDialogStyleLight</item>
<item name="compose_icon_tint">@color/core_grey_60</item>
<item name="conversation_list_item_background">@drawable/conversation_list_item_background</item>
<item name="conversation_list_item_contact_color">@color/core_grey_90</item>
<item name="conversation_list_item_subject_color">@color/core_grey_60</item>
@ -74,8 +74,6 @@
<item name="conversation_sticker_footer_icon_color">@color/core_grey_60</item>
<item name="conversation_sticker_author_color">@color/core_grey_95</item>
<item name="contact_list_divider">@drawable/contact_list_divider_light</item>
<item name="verification_background">@color/core_grey_05</item>
<item name="emoji_tab_strip_background">@color/cell_background</item>
@ -101,21 +99,13 @@
<item name="conversation_item_sent_text_primary_color">@color/core_grey_90</item>
<item name="conversation_item_sent_text_secondary_color">@color/transparent_black_90</item>
<item name="conversation_item_sent_icon_color">@color/core_grey_60</item>
<item name="conversation_item_sent_download_icon_color">@color/core_grey_60</item>
<item name="conversation_item_sent_text_indicator_tab_color">#99000000</item>
<item name="conversation_item_received_text_primary_color">@color/text</item>
<item name="conversation_item_received_text_secondary_color">@color/text</item>
<item name="conversation_item_update_text_color">@color/core_grey_60</item>
<item name="conversation_item_last_seen_text_color">@color/core_grey_90</item>
<item name="conversation_item_last_seen_line_color">@color/core_grey_60</item>
<item name="conversation_item_date_line_color">@color/core_grey_25</item>
<item name="conversation_item_quote_text_color">@color/core_grey_90</item>
<item name="conversation_item_sticky_date_background">@drawable/sticky_date_header_background_light</item>
<item name="conversation_item_sticky_date_text_color">@color/core_grey_60</item>
<item name="conversation_item_image_outline_color">@color/transparent_black_30</item>
<item name="quick_mic_icon">@drawable/ic_mic_grey600_24dp</item>
<item name="conversation_item_sent_indicator_text_background">@drawable/conversation_item_sent_indicator_text_shape</item>
<item name="dialog_info_icon">@drawable/ic_info_outline_light</item>
@ -124,34 +114,14 @@
<item name="device_link_item_card_background">@color/device_link_item_background_light</item>
<item name="mediapicker_image_outline">@drawable/mediapicker_item_border_light</item>
<item name="import_export_item_background_color">@color/import_export_item_background_light</item>
<item name="import_export_item_background_shadow_color">@color/import_export_item_background_shadow_light</item>
<item name="import_export_item_card_background">@drawable/clickable_card_light</item>
<item name="linkpreview_background_color">@color/core_white</item>
<item name="linkpreview_primary_text_color">@color/core_black</item>
<item name="linkpreview_secondary_text_color">@color/core_grey_60</item>
<item name="linkpreview_divider_color">@color/core_grey_25</item>
<item name="media_keyboard_button_color">@color/core_grey_60</item>
<item name="menu_new_conversation_icon">@drawable/ic_add_white_24dp</item>
<item name="menu_group_icon">@drawable/ic_group_white_24dp</item>
<item name="menu_search_icon">@drawable/ic_search_white_24dp</item>
<item name="menu_call_icon">@drawable/ic_call_white_24dp</item>
<item name="menu_unlock_icon">@drawable/ic_unlocked_white_24dp</item>
<item name="menu_lock_icon">@drawable/ic_lock_white_24dp</item>
<item name="menu_lock_icon_small">@drawable/ic_lock_white_18dp</item>
<item name="menu_refresh_directory">@drawable/ic_refresh_white_24dp</item>
<item name="menu_info_icon">@drawable/ic_info_outline_white_24dp</item>
<item name="conversation_icon_attach_audio">@drawable/ic_audio_light</item>
<item name="conversation_icon_attach_video">@drawable/ic_video_light</item>
<item name="reminder_header_background">#ff1d85d7</item>
<item name="sticker_management_icon">@drawable/sticker_button_light</item>
<item name="sticker_management_divider_color">@color/core_grey_15</item>
<item name="sticker_management_empty_background_color">@color/core_grey_05</item>
@ -165,17 +135,9 @@
<item name="pref_icon_tint">@color/textsecure_primary_dark</item>
<item name="pref_divider">@drawable/preference_divider_light</item>
<item name="quote_missing_icon_color">@color/core_grey_60</item>
<item name="group_members_dialog_icon">@drawable/ic_group_grey600_24dp</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.Fix</item>
<item name="search_toolbar_background">@color/white</item>
<item name="search_background">@color/white</item>
<item name="invite_background">@color/signal_primary</item>
<item name="shared_contact_details_header_background">@color/grey_100</item>
<item name="shared_contact_details_titlebar">@color/grey_400</item>
<item name="shared_contact_item_button_color">@color/core_grey_02</item>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<style name="Theme.Session.DayNight" parent="Theme.Session.Light">
<item name="android:statusBarColor">@color/transparent</item>

View File

@ -1357,7 +1357,6 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<!-- Session -->
<!--
<string name="continue_2">Kontyntynuj</string>
<string name="copy">Kopiuj</string>
<string name="invalid_url">nieprawidłowy URL</string>
@ -1405,12 +1404,6 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<string name="activity_display_name_display_name_invalid_error">Wybierz wyświetlaną nazwę, która składa się tylko z znaków az, AZ, 09 i _</string>
<string name="activity_display_name_display_name_too_long_error">Wybierz krótszą nazwę wyświetlaną</string>
<string name="activity_pn_mode_title">Powiadomienia push</string>
<string name="activity_pn_mode_explanation">Istnieją dwa sposoby obsługi powiadomień wypychanych przez sesję. Przeczytaj uważnie opisy, zanim wybierzesz.</string>
<string name="activity_pn_mode_fcm_option_title">Firebase Cloud Messaging</string>
<string name="activity_pn_mode_fcm_option_explanation">Sesja będzie korzystała z usługi Firebase Cloud Messaging do otrzymywania powiadomień push. Będziesz powiadamiany o nowych wiadomościach niezawodnie i natychmiast. Korzystanie z FCM oznacza, że Twój adres IP i token urządzenia zostaną udostępnione Google. Jeśli używasz powiadomień push dla innych aplikacji, tak już będzie. Twój adres IP i token urządzenia będą również narażone na działanie Lokiego, ale wiadomości będą nadal kierowane do cebuli i szyfrowane od końca do końca, więc zawartość wiadomości pozostanie całkowicie prywatna.</string>
<string name="activity_pn_mode_background_polling_option_title">Sondowanie w tle</string>
<string name="activity_pn_mode_background_polling_option_explanation">Sesja od czasu do czasu sprawdza nowe wiadomości w tle. Gwarantuje to pełną ochronę metadanych, ale powiadomienia mogą być znacznie opóźnione.</string>
<string name="activity_pn_mode_recommended_option_tag">Zalecana</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Wybierz opcję</string>
@ -1421,17 +1414,6 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<string name="activity_home_delete_conversation_dialog_message">Czy na pewno chcesz usunąć tę rozmowę?</string>
<string name="activity_home_conversation_deleted_message">Rozmowa usunięta</string>
<string name="sheet_pn_mode_title">Powiadomienia push</string>
<string name="sheet_pn_mode_explanation">Sesja oferuje teraz dwa sposoby obsługi powiadomień wypychanych. Przeczytaj uważnie opisy, zanim wybierzesz.</string>
<string name="sheet_pn_mode_fcm_option_title">Firebase Cloud Messaging</string>
<string name="sheet_pn_mode_fcm_option_explanation">Sesja będzie korzystała z usługi Firebase Cloud Messaging do otrzymywania powiadomień push. Będziesz powiadamiany o nowych wiadomościach niezawodnie i natychmiast. Korzystanie z FCM oznacza, że Twój adres IP i token urządzenia zostaną udostępnione Google. Jeśli używasz powiadomień push dla innych aplikacji, tak już będzie. Twój adres IP i token urządzenia będą również narażone na działanie Lokiego, ale wiadomości będą nadal kierowane do cebuli i szyfrowane od końca do końca, więc zawartość wiadomości pozostanie całkowicie prywatna.</string>
<string name="sheet_pn_mode_background_polling_option_title">Sondowanie w tle</string>
<string name="sheet_pn_mode_background_polling_option_explanation">Sesja od czasu do czasu sprawdza nowe wiadomości w tle. Gwarantuje to pełną ochronę metadanych, ale powiadomienia mogą być znacznie opóźnione.</string>
<string name="sheet_pn_mode_recommended_option_tag">Zalecana</string>
<string name="sheet_pn_mode_no_option_picked_dialog_title">Wybierz opcję</string>
<string name="sheet_pn_mode_confirm_button_title">Potwierdzać</string>
<string name="sheet_pn_mode_skip_button_title">Pominąć</string>
<string name="activity_seed_title">Twoja fraza odzyskiwania</string>
<string name="activity_seed_title_2">Poznaj swoją frazę odzyskiwania</string>
<string name="activity_seed_explanation">Twoja fraza odzyskiwania jest kluczem głównym do identyfikatora Session - możesz go użyć do przywrócenia identyfikatora Session, jeśli stracisz dostęp do urządzenia. Przechowuj swoją frazę odzyskiwania w bezpiecznym miejscu i nikomu jej nie udostępniaj.</string>
@ -1477,7 +1459,6 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<string name="activity_join_public_chat_scan_qr_code_explanation">Zeskanuj kod QR otwartej grupy, do której chcesz dołączyć</string>
<string name="fragment_enter_chat_url_edit_text_hint">Wprowadź adres URL otwartej grupy</string>
<string name="fragment_enter_chat_url_privacy_warning">Do otwartych grup może dołączyć każdy i nie zapewniają pełnej ochrony prywatności</string>
<string name="activity_settings_title">Ustawienia</string>
<string name="activity_settings_display_name_edit_text_hint">Wprowadź wyświetlaną nazwe</string>
@ -1509,8 +1490,6 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<string name="activity_linked_devices_empty_state_button_title">Połącz urządzenie (Beta)</string>
<string name="preferences_notifications_strategy_category_title">Strategia powiadomień</string>
<string name="preferences_notifications_use_fcm_option_title">Użyj FCM</string>
<string name="preferences_notifications_use_fcm_option_explanation">Korzystanie z Firebase Cloud Messaging pozwala na bardziej niezawodne powiadomienia wypychane, ale udostępnia adres IP i token urządzenia Google i Lokiemu.</string>
<string name="dialog_link_device_slave_mode_title_1">Oczekiwanie na autoryzację</string>
<string name="dialog_link_device_slave_mode_title_2">Link do urządzenia autoryzowany</string>
@ -1544,16 +1523,6 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<string name="fragment_view_my_qr_code_explanation">To jest twój kod QR. Inni użytkownicy mogą go zeskanować, aby rozpocząć z tobą sesję.</string>
<string name="fragment_view_my_qr_code_share_title">Udostępnij kod QR</string>
<string name="view_friend_request_accept_button_title">Zaakceptować</string>
<string name="view_friend_request_reject_button_title">Upadek</string>
<string name="view_friend_request_incoming_pending_message">%1$s wysłał Ci prośbę o sesję</string>
<string name="view_friend_request_incoming_accepted_message">Zaakceptowałeś prośbę o sesję %1$s</string>
<string name="view_friend_request_incoming_declined_message">Odrzuciłeś żądanie Session %1$s</string>
<string name="view_friend_request_incoming_expired_message">Żądanie Session %1$s wygasło</string>
<string name="view_friend_request_outgoing_pending_message">Wysłano %1$s żądanie Session</string>
<string name="view_friend_request_outgoing_accepted_message">%1$s zaakceptował Twoje żądanie Session</string>
<string name="view_friend_request_outgoing_expired_message">Twoje żądanie Session do %1$s wygasło</string>
<string name="session_reset_banner_message">Czy chcesz przywrócić sesję za pomocą %s?</string>
<string name="session_reset_banner_dismiss_button_title">Oddalić</string>
<string name="session_reset_banner_restore_button_title">Przywracać</string>
@ -1561,6 +1530,5 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.</string>
<string name="fragment_contact_selection_contacts_title">Łączność</string>
<string name="fragment_contact_selection_closed_groups_title">Grupy zamknięte</string>
<string name="fragment_contact_selection_open_groups_title">Otwórz grupy</string>
-->
</resources>

View File

@ -8,7 +8,7 @@
<dimen name="small_font_size">13sp</dimen>
<dimen name="medium_font_size">15sp</dimen>
<dimen name="large_font_size">20sp</dimen>
<dimen name="very_large_font_size">25sp</dimen>
<dimen name="very_large_font_size">24sp</dimen>
<dimen name="massive_font_size">50sp</dimen>
<!-- Session -->

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<resources>
<style name="Theme.Session.ForceDark" parent="Base.Theme.Session.ForceDark">
<item name="android:windowLightStatusBar">false</item>

View File

@ -746,5 +746,185 @@ Các tin nhắn và cuộc gọi riêng tư miễn phí đến người dùng Si
<string name="AppProtectionPreferenceFragment_none">Không</string>
<string name="RegistrationActivity_too_many_attempts">Thử quá nhiều lần</string>
<string name="RegistrationLockDialog_disable">Tắt</string>
<!--EOF-->
<!-- Session -->
<string name="continue_2">Tiếp tục</string>
<string name="copy">Sao chép</string>
<string name="invalid_url">URL không hợp lệ</string>
<string name="copied_to_clipboard">Sao chép vào bộ nhớ tạm</string>
<string name="device_linking_failed">Không thể liên kết thiết bị.</string>
<string name="next">Tiếp</string>
<string name="share">Chia sẻ</string>
<string name="invalid_session_id">Session ID không hợp lệ</string>
<string name="cancel">Huỷ</string>
<string name="your_session_id">Session ID của bạn</string>
<string name="activity_landing_title_2">Session của bạn bắt đầu từ đây...</string>
<string name="activity_landing_register_button_title">Tạo Session ID</string>
<string name="activity_landing_restore_button_title">Tiếp tục Session của bạn</string>
<string name="activity_landing_link_button_title">Liên kết với một tài khoản đã tồn tại</string>
<string name="activity_landing_device_unlinked_dialog_title">Thiết bị của bạn đã được ngắt liên kết thành công</string>
<string name="view_fake_chat_bubble_1">Session là gì?</string>
<string name="view_fake_chat_bubble_2">Đây là một ứng dụng nhắn tin phân cấp và mã hoá</string>
<string name="view_fake_chat_bubble_3">Vậy ứng dụng có thu thập dữ liệu cá nhân của tôi hoặc siêu dữ liệu về cuộc hội thoại của tôi không? Ứng dụng hoạt động như thế nào?</string>
<string name="view_fake_chat_bubble_4">Sử dụng kết hợp công nghệ định tuyến ẩn danh nâng cao và công nghệ mã hoá đầu cuối.</string>
<string name="view_fake_chat_bubble_5">Đừng để bạn bè sử dụng những ứng dụng nhắn tin dễ bị tấn công.</string>
<string name="activity_register_title">Bắt đầu với Session ID của bạn</string>
<string name="activity_register_explanation">Session ID của bạn là địa chỉ duy nhất mà mọi người có thể dùng để liên lạc với bạn trên ứng dụng Session. Session ID của bạn được thiết kế đảm bảo tuyệt đối ẩn danh và riêng tư vì nó không liên kết với danh tính thật của bạn.</string>
<string name="activity_register_public_key_copied_message">Sao chép vào bộ nhớ tạm</string>
<string name="activity_restore_title">Khôi phục lại tài khoản của bạn</string>
<string name="activity_restore_explanation">Nhập cụm từ khôi phục mà bạn nhận được khi đăng ký khôi phục tài khoản.</string>
<string name="activity_restore_seed_edit_text_hint">Nhập cụm từ khôi phục của bạn.</string>
<string name="activity_link_device_title">Liên kết Thiết bị</string>
<string name="activity_link_device_enter_session_id_tab_title">Nhập Session ID</string>
<string name="activity_link_device_scan_qr_code_tab_title">Quét mã QR</string>
<string name="activity_link_device_scan_qr_code_explanation">Đi đến mục "Cài đặt" > "Thiết bị" > "Liên kết với một Thiết bị" trên thiết bị khác của bạn và quét mã QR hiện lên để bắt đầu quá trình liên kết.</string>
<string name="fragment_enter_session_id_title">Liên kết thiết bị của bạn</string>
<string name="fragment_enter_session_id_explanation"> Đi đến mục "Cài đặt" > "Thiết bị" > "Liên kết với một Thiết bị" trên thiết bị khác của bạn và quét mã QR hiện lên để bắt đầu quá trình liên kết.</string>
<string name="fragment_enter_session_id_edit_text_hint">Nhập Session ID của bạn</string>
<string name="activity_display_name_title_2">Chọn tên hiển thị của bạn</string>
<string name="activity_display_name_explanation">Đây là tên của bạn khi sử dụng Session. Nó có thể là tên thật, tên gọi khác của bạn hoặc bất kì tên nào bạn thích.</string>
<string name="activity_display_name_edit_text_hint">Nhập một tên hiển thị</string>
<string name="activity_display_name_display_name_missing_error">Vui lòng chọn một tên hiển thị</string>
<string name="activity_display_name_display_name_invalid_error">Vui lòng chọn tên hiện thị chỉ chứa các kí tự a-z, A-Z, 0-9 and _ </string>
<string name="activity_display_name_display_name_too_long_error">Vui lòng chọn tên hiển thị ngắn hơn</string>
<string name="activity_pn_mode_recommended_option_tag">Khuyến nghị</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Vui lòng lựa chọn </string>
<string name="activity_home_empty_state_message">Bạn chưa có danh bạ </string>
<string name="activity_home_empty_state_button_title">Bắt đầu một Session</string>
<string name="activity_home_leave_group_dialog_message">Bạn có chắc chắn rằng bạn muốn rời nhóm này không?</string>
<string name="activity_home_leaving_group_failed_message">"Không thể rời nhóm"</string>
<string name="activity_home_delete_conversation_dialog_message">Bạn có chắc chắn rằng bạn muốn xoá cuộc hội thoại này không?</string>
<string name="activity_home_conversation_deleted_message">Cuộc hội thoại đã được xoá </string>
<string name="activity_seed_title">Cụm từ khôi phục của bạn</string>
<string name="activity_seed_title_2">Làm quen với cụm từ khôi phục của bạn</string>
<string name="activity_seed_explanation">Cụm từ khôi phục của bạn là chìa khoá chủ cho Session ID của bạn — bạn có thể sử dụng nó để khôi phục Session ID khi bị mất tiếp cận với thiết bị của bạn. Hãy lưu cụm từ khôi phục của bạn ở một nơi an toàn và không cung cấp cho bất kì ai.</string>
<string name="activity_seed_reveal_button_title">Giữ để hiển thị.</string>
<string name="view_seed_reminder_subtitle_1">Bảo vệ tài khoản của bạn bằng việc bảo vệ cụm từ khôi phục của bạn</string>
<string name="view_seed_reminder_subtitle_2">Chạm và giữ cụm từ bị che để hiển thị cụm từ khôi phục của bạn, sau đó lưu nó cẩn thận để bảo vệ Session ID của bạn.</string>
<string name="view_seed_reminder_subtitle_3">Hãy lưu cụm từ khôi phục của bạn ở một nơi an toàn</string>
<string name="activity_path_title">Đường đi</string>
<string name="activity_path_explanation">Session ẩn IP của bạn bằng cách luân chuyển tin nhắn của bạn qua một số Nút Dịch vụ trong mạng lưới phân cấp của Session. Đây là các nước mà kết nối của bạn đang được luân chuyển: </string>
<string name="activity_path_device_row_title">Bạn</string>
<string name="activity_path_guard_node_row_title">Nút khởi đầu</string>
<string name="activity_path_service_node_row_title">Nút Dịch vụ</string>
<string name="activity_path_destination_row_title">Điểm đến</string>
<string name="activity_path_learn_more_button_title">Tìm hiểu thêm</string>
<string name="activity_create_private_chat_title">Session mới</string>
<string name="activity_create_private_chat_enter_session_id_tab_title">Nhập Session ID</string>
<string name="activity_create_private_chat_scan_qr_code_tab_title">Quét mã QR</string>
<string name="activity_create_private_chat_scan_qr_code_explanation">Quét mã QR của người dùng để bắt đầu session. Tìm mã QR bằng cách chạm vào biểu tượng mã QR trong mục cài đặt tài khoản.</string>
<string name="fragment_enter_public_key_edit_text_hint">Nhập Session ID của người nhận</string>
<string name="fragment_enter_public_key_explanation">Người dùng có thể chia sẻ Session ID của mình bằng cách tới mục cài đặt tài khoản và chạm vào “Chia sẻ Session ID”, hoặc bằng cách chia sẻ mã QR của họ.</string>
<string name="fragment_scan_qr_code_camera_access_explanation">Session cần truy cập máy ảnh để quét mã QR </string>
<string name="fragment_scan_qr_code_grant_camera_access_button_title">Cho phép truy cập máy ảnh</string>
<string name="activity_create_closed_group_title">Nhóm kín mới </string>
<string name="activity_create_closed_group_edit_text_hint">Nhập tên nhóm</string>
<string name="activity_create_closed_group_explanation">Nhóm kín hỗ trợ tối đa 10 thành viên và cung cấp dịch vụ bảo mật giống như các session một-một</string>
<string name="activity_create_closed_group_empty_state_message">Bạn chưa có danh bạ nào </string>
<string name="activity_create_closed_group_empty_state_button_title">Bắt đầu Session</string>
<string name="activity_create_closed_group_group_name_missing_error">Vui lòng nhập tên nhóm</string>
<string name="activity_create_closed_group_group_name_too_long_error">Vui lòng nhập một tên nhóm ngắn hơn </string>
<string name="activity_create_closed_group_not_enough_group_members_error">Vui lòng chọn ít nhất 2 thành viên trong nhóm </string>
<string name="activity_create_closed_group_too_many_group_members_error">Một nhóm kín không thể có nhiều hơn 10 thành viên </string>
<string name="activity_create_closed_group_invalid_session_id_error">Một trong các thành viên trong nhóm của bạn có Session ID không hợp lệ </string>
<string name="activity_join_public_chat_title">Tham gia nhóm mở</string>
<string name="activity_join_public_chat_error">Không thể tham gia nhóm</string>
<string name="activity_join_public_chat_enter_group_url_tab_title">URL của nhóm mở</string>
<string name="activity_join_public_chat_scan_qr_code_tab_title">Quét mã QR</string>
<string name="activity_join_public_chat_scan_qr_code_explanation"> Quét mã QR của nhóm mở mà bạn muốn tham gia</string>
<string name="fragment_enter_chat_url_edit_text_hint">Nhập URL của nhóm mở</string>
<string name="activity_settings_title">Cài đặt</string>
<string name="activity_settings_display_name_edit_text_hint">Nhập tên hiển thị</string>
<string name="activity_settings_display_name_missing_error">Vui lòng chọn một tên hiển thị </string>
<string name="activity_settings_invalid_display_name_error">Vui lòng chọn một tên hiển thị chỉ bao gồm các ký tự a-z, A-Z, 0-9 và _ </string>
<string name="activity_settings_display_name_too_long_error">Vui lòng chọn một tên hiển thị ngắn hơn </string>
<string name="activity_settings_privacy_button_title">Riêng tư</string>
<string name="activity_settings_notifications_button_title">Thông báo</string>
<string name="activity_settings_chats_button_title">Trò chuyện</string>
<string name="activity_settings_devices_button_title">Thiết bị</string>
<string name="activity_settings_recovery_phrase_button_title">Cụm từ khôi phục</string>
<string name="activity_settings_clear_all_data_button_title">Xóa dữ liệu</string>
<string name="activity_notification_settings_title">Thông báo</string>
<string name="activity_notification_settings_style_section_title">Kiểu thông báo</string>
<string name="activity_notification_settings_content_section_title">Nội dung thông báo</string>
<string name="activity_privacy_settings_title">Riêng tưy</string>
<string name="activity_chat_settings_title">Trò chuyện</string>
<string name="activity_linked_devices_title">Thiết bị</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_title">Đã đạt tới giới hạn thiết bị</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_explanation">Hiện tại không cho phép kết nối với nhiều hơn một thiết bị.</string>
<string name="activity_linked_devices_unlinking_failed_message">Không thể hủy liên kết thiết bị.</string>
<string name="activity_linked_devices_unlinking_successful_message">Thiết bị của bạn đã được hủy liên kết thành công</string>
<string name="activity_linked_devices_linking_failed_message">Không thể liên kết thiết bị.</string>
<string name="activity_linked_devices_empty_state_message">Bạn chưa liên kết thiết bị nào</string>
<string name="activity_linked_devices_empty_state_button_title">Kết nối một thiết bị (Beta)</string>
<string name="preferences_notifications_strategy_category_title">Chiến lược thông báo</string>
<string name="dialog_link_device_slave_mode_title_1">Đang chờ được cho phép</string>
<string name="dialog_link_device_slave_mode_title_2">Liên kết thiết bị được cho phép </string>
<string name="dialog_link_device_slave_mode_explanation_1">Hãy kiểm tra xem các từ bên dưới có khớp với các từ được hiển thị trên thiết bị khác của bạn không.</string>
<string name="dialog_link_device_slave_mode_explanation_2">Thiết bị của bạn đã được liên kết thành công </string>
<string name="dialog_link_device_master_mode_title_1">Đang đợi thiết bị </string>
<string name="dialog_link_device_master_mode_title_2">Đã nhận được yêu cầu liên kết</string>
<string name="dialog_link_device_master_mode_title_3">Đang cho phép liên kết thiết bị</string>
<string name="dialog_link_device_master_mode_explanation_1">Tải Session về thiết bị khác của bạn và chọn "Liên kết với một tài khoản đã tồn tại" ở phía cuối của màn hình đích. Nếu tại khoản hiện tại của bạn đang ở một thiết bị khác, bạn cần phải xóa tài khoản đó trước.</string>
<string name="dialog_link_device_master_mode_explanation_2"> Hãy kiểm tra xem các từ bên dưới có khớp với các từ được hiển thị trên thiết bị khác của bạn không.</string>
<string name="dialog_link_device_master_mode_explanation_3">Liên kết thiết bị đang được tạo, vui lòng chờ đợi. Quá trình này có thể mất khoảng một phút.</string>
<string name="dialog_link_device_master_mode_authorize_button_title">Cho phép</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Đổi tên</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Hủy liên kết thiết bị</string>
<string name="dialog_edit_device_name_edit_text_hint">Nhập tên</string>
<string name="dialog_seed_title">Cụm từ khôi phục của bạn</string>
<string name="dialog_seed_explanation">Đây là cụm từ khôi phục của bạn. Bạn có thể dùng nó để khôi phục hoặc chuyển Session ID của mình sang một thiết bị mới.</string>
<string name="dialog_clear_all_data_title">Xóa tất cả dữ liệu</string>
<string name="dialog_clear_all_data_explanation">Thao tác này sẽ xóa vĩnh viễn các tin nhắn, sessions, và danh bạ của bạn.</string>
<string name="activity_qr_code_title">Mã QR</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">Xem mã QR của tôi</string>
<string name="activity_qr_code_view_scan_qr_code_tab_title">Quét mã QR</string>
<string name="activity_qr_code_view_scan_qr_code_explanation">Quét mã QR của ai đó để bắt đầu trò chuyện với họ</string>
<string name="fragment_view_my_qr_code_explanation">Đây là mã QR của bạn. Những người dùng khác có thể quét mã này và bắt đầu session với bạn.</string>
<string name="fragment_view_my_qr_code_share_title">Chia sẻ mã QR </string>
<string name="session_reset_banner_message">Bạn có muốn khôi phục lại session của bạn với %s không?</string>
<string name="session_reset_banner_dismiss_button_title">Bỏ qua</string>
<string name="session_reset_banner_restore_button_title">Khôi phục</string>
<string name="fragment_contact_selection_contacts_title">Danh bạ</string>
<string name="fragment_contact_selection_closed_groups_title">Nhóm kín</string>
<string name="fragment_contact_selection_open_groups_title">Nhóm mở</string>
</resources>

View File

@ -19,16 +19,13 @@
<attr name="conversation_list_toolbar_background" format="reference"/>
<attr name="conversation_list_typing_tint" format="color"/>
<attr name="conversation_sent_card_background" format="reference|color"/>
<attr name="conversation_group_member_name" format="reference|color"/>
<attr name="conversation_received_card_background" format="reference|color"/>
<attr name="fab_color" format="reference|color" />
<attr name="lower_right_divet" format="reference" />
<attr name="centered_app_title_color" format="reference|color" />
<attr name="ic_arrow_forward" format="reference" />
<attr name="ic_visibility" format="reference" />
<attr name="ic_visibility_on" format="reference" />
<attr name="ic_visibility_off" format="reference" />
<attr name="conversation_background" format="reference|color"/>
@ -76,9 +73,6 @@
<attr name="quick_camera_icon" format="reference"/>
<attr name="quick_mic_icon" format="reference"/>
<attr name="compose_icon_tint" />
<attr name="conversation_item_background" format="reference"/>
<attr name="conversation_item_bubble_background" format="reference|color"/>
<attr name="conversation_item_sent_text_primary_color" format="reference|color"/>
<attr name="conversation_item_sent_text_secondary_color" format="reference|color"/>
@ -87,12 +81,6 @@
<attr name="conversation_item_sent_text_indicator_tab_color" format="reference|color"/>
<attr name="conversation_item_sent_indicator_text_background" format="reference" />
<attr name="conversation_item_sent_icon_color" format="color" />
<attr name="conversation_item_sent_download_icon_color" format="reference|color"/>
<attr name="conversation_item_update_text_color" format="reference"/>
<attr name="conversation_item_last_seen_text_color" format="reference"/>
<attr name="conversation_item_last_seen_line_color" format="reference"/>
<attr name="conversation_item_date_line_color" format="reference"/>
<attr name="conversation_item_quote_text_color" format="reference"/>
<attr name="conversation_item_sticky_date_background" format="reference" />
<attr name="conversation_item_sticky_date_text_color" format="color" />
<attr name="conversation_item_image_outline_color" format="color" />
@ -104,45 +92,21 @@
<attr name="conversation_icon_attach_audio" format="reference"/>
<attr name="conversation_icon_attach_video" format="reference" />
<attr name="contact_selection_push_user" format="reference|color" />
<attr name="contact_selection_lay_user" format="reference|color" />
<attr name="contact_selection_label_text" format="reference|color" />
<attr name="contact_selection_header_text" format="reference|color" />
<attr name="device_link_item_card_background" format="reference|color" />
<attr name="mediapicker_image_outline" format="reference" />
<attr name="import_export_item_background_color" format="reference|color" />
<attr name="import_export_item_background_shadow_color" format="reference|color" />
<attr name="import_export_item_card_background" format="reference" />
<attr name="invite_background" format="color"/>
<attr name="linkpreview_background_color" format="color" />
<attr name="linkpreview_primary_text_color" format="color" />
<attr name="linkpreview_secondary_text_color" format="color" />
<attr name="linkpreview_divider_color" format="color" />
<attr name="reminder_header_background" format="color"/>
<attr name="media_keyboard_button_color" format="color" />
<attr name="menu_new_conversation_icon" format="reference" />
<attr name="menu_search_icon" format="reference" />
<attr name="menu_call_icon" format="reference" />
<attr name="menu_popup_expand" format="reference"/>
<attr name="menu_unlock_icon" format="reference" />
<attr name="menu_lock_icon" format="reference" />
<attr name="menu_lock_icon_small" format="reference" />
<attr name="menu_trash_icon" format="reference" />
<attr name="menu_selectall_icon" format="reference" />
<attr name="menu_group_icon" format="reference" />
<attr name="menu_split_icon" format="reference" />
<attr name="menu_accept_icon" format="reference" />
<attr name="menu_refresh_directory" format="reference" />
<attr name="menu_copy_icon" format="reference" />
<attr name="menu_info_icon" format="reference" />
<attr name="menu_forward_icon" format="reference" />
<attr name="menu_save_icon" format="reference" />
<attr name="menu_reply_icon" format="reference" />
@ -152,40 +116,23 @@
<attr name="pref_icon_tint" format="color"/>
<attr name="pref_divider" format="reference" />
<attr name="quote_missing_icon_color" format="color" />
<attr name="home_gradient_start" format="color|reference" />
<attr name="home_gradient_end" format="color|reference" />
<attr name="message_received_background_color" format="color|reference" />
<attr name="message_sent_background_color" format="color|reference" />
<declare-styleable name="CustomDefaultPreference">
<attr name="custom_pref_toggle" format="string"/>
</declare-styleable>
<attr name="group_members_dialog_icon" format="reference"/>
<attr name="lockscreen_watermark" format="reference" />
<attr name="recipient_preference_blocked" format="color"/>
<attr name="verification_background" format="color"/>
<attr name="media_overview_toolbar_background" format="color"/>
<attr name="media_overview_toolbar_foreground" format="color"/>
<attr name="media_overview_header_foreground" format="color"/>
<attr name="media_overview_document_primary" format="color"/>
<attr name="media_overview_document_secondary" format="color"/>
<attr name="shared_contact_details_header_background" format="color"/>
<attr name="shared_contact_details_titlebar" format="color"/>
<attr name="shared_contact_item_button_color" format="color"/>
<attr name="search_toolbar_background" format="color"/>
<attr name="search_background" format="color"/>
<attr name="sticker_management_icon" format="reference" />
<attr name="sticker_management_divider_color" format="color" />
<attr name="sticker_management_empty_background_color" format="color" />
@ -197,15 +144,8 @@
<attr name="tooltip_default_color" format="reference|color" />
<attr name="contact_list_divider" format="reference"/>
<attr name="login_top_background" format="color"/>
<attr name="login_floating_background" format="reference"/>
<declare-styleable name="ColorPreference">
<attr name="itemLayout" format="reference" />
<attr name="choices" format="reference" />
<attr name="numColumns" format="integer" />
<declare-styleable name="CustomDefaultPreference">
<attr name="custom_pref_toggle" format="string"/>
</declare-styleable>
<declare-styleable name="AvatarImageView">
@ -270,22 +210,12 @@
<attr name="emoji_maxLength" format="integer" />
</declare-styleable>
<declare-styleable name="RingtonePreference">
<attr name="showAdd" format="boolean" />
<attr name="summaryHasRingtone" format="string|reference" />
</declare-styleable>
<declare-styleable name="ColorPickerPreference">
<attr name="currentColor" format="reference" />
<attr name="colors" format="reference" />
<attr name="sortColors" format="boolean|reference" />
<attr name="colorDescriptions" format="reference" />
<attr name="columns" format="integer|reference" />
<attr name="colorSize" format="enum|reference">
<enum name="large" value="1" />
<enum name="small" value="2" />

View File

@ -7,6 +7,8 @@
<color name="text">#FFFFFF</color>
<color name="destructive">#FF453A</color>
<color name="unimportant">#D8D8D8</color>
<color name="profile_picture_border">#23FFFFFF</color>
<color name="profile_picture_background">#353535</color>
<color name="border">#979797</color>
<color name="cell_background">#1B1B1B</color>
<color name="cell_selected">#0C0C0C</color>
@ -25,9 +27,17 @@
<color name="compose_text_view_background">#141414</color>
<color name="quote_not_found_background">#99FFFFFF</color>
<color name="new_conversation_button_collapsed_background">#1F1F1F</color>
<color name="new_conversation_button_shadow">#077C44</color>
<color name="pn_option_background">#1B1B1B</color>
<color name="pn_option_border">#212121</color>
<color name="paths_building">#FFCE3A</color>
<array name="profile_picture_placeholder_colors">
<item>#5ff8b0</item>
<item>#26cdb9</item>
<item>#f3c615</item>
<item>#fcac5a</item>
</array>
<!-- Session -->
<!-- Loki -->

View File

@ -8,7 +8,7 @@
<dimen name="small_font_size">15sp</dimen>
<dimen name="medium_font_size">17sp</dimen>
<dimen name="large_font_size">22sp</dimen>
<dimen name="very_large_font_size">27sp</dimen>
<dimen name="very_large_font_size">26sp</dimen>
<dimen name="massive_font_size">50sp</dimen>
<!-- Element Sizes -->
@ -29,9 +29,9 @@
<dimen name="text_view_corner_radius">8dp</dimen>
<dimen name="fake_chat_view_bubble_width">224dp</dimen>
<dimen name="fake_chat_view_bubble_corner_radius">10dp</dimen>
<dimen name="fake_chat_view_height">234dp</dimen>
<dimen name="fake_chat_view_height">250dp</dimen>
<dimen name="setting_button_height">56dp</dimen>
<dimen name="dialog_corner_radius">12dp</dimen>
<dimen name="dialog_corner_radius">8dp</dimen>
<dimen name="dialog_button_corner_radius">4dp</dimen>
<dimen name="pn_option_corner_radius">8dp</dimen>
<dimen name="path_status_view_size">8dp</dimen>

View File

@ -1830,11 +1830,11 @@
<string name="fragment_contact_selection_closed_groups_title">Closed Groups</string>
<string name="fragment_contact_selection_open_groups_title">Open Groups</string>
<!-- Next round of translation -->
<string name="menu_apply_button">Apply</string>
<string name="menu_done_button">Done</string>
<!-- Next round of translation -->
<string name="activity_edit_closed_group_title">Edit Group</string>
<string name="activity_edit_closed_group_edit_text_hint">Enter a new group name</string>
<string name="activity_edit_closed_group_edit_members">Members</string>
@ -1851,7 +1851,7 @@
<string name="activity_select_contacts_title">Select Contacts</string>
<string name="dialog_seed_disclaimer">*Please note that it is not possible to use the same Session ID on multiple devices simultaneously</string>
<string name="dialog_seed_disclaimer">It is not possible to use the same Session ID on multiple devices simultaneously</string>
<string name="view_reset_secure_session_done_message">Secure session reset done</string>
@ -1864,5 +1864,6 @@
<string name="attachment">Attachment</string>
<string name="attachment_type_voice_message">Voice Message</string>
<string name="details">Details</string>
</resources>

View File

@ -6,7 +6,6 @@
<item name="android:background">?colorPrimary</item>
<item name="elevation">1dp</item>
<item name="titleTextStyle">@style/TextAppearance.Session.DarkActionBar.TitleTextStyle</item>
<item name="popupTheme">@style/Widget.Session.ActionBar</item>
</style>
<style name="Widget.Session.ActionBar.Flat">
@ -184,10 +183,12 @@
<style name="FakeChatViewMessageBubble.Incoming">
<item name="android:background">@drawable/fake_chat_view_incoming_message_background</item>
<item name="android:elevation">10dp</item>
</style>
<style name="FakeChatViewMessageBubble.Outgoing">
<item name="android:background">@drawable/fake_chat_view_outgoing_message_background</item>
<item name="android:elevation">10dp</item>
</style>
<!-- Session -->

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Session -->
@ -43,16 +42,14 @@
<item name="dividerHorizontal">?dividerVertical</item>
<!-- App specific attributes -->
<item name="search_toolbar_background">@color/black</item>
<item name="search_background">@color/black</item>
<item name="ic_visibility_on">@drawable/ic_baseline_visibility_24</item>
<item name="ic_visibility_off">@drawable/ic_baseline_visibility_off_24</item>
<item name="ic_arrow_forward">@drawable/ic_baseline_arrow_forward_24</item>
<item name="dialog_background_color">@color/dialog_background</item>
<item name="media_overview_toolbar_background">@color/transparent</item>
<item name="media_overview_toolbar_foreground">@color/white</item>
<item name="media_overview_header_foreground">@color/text</item>
<item name="media_overview_document_primary">@color/core_grey_05</item>
<item name="media_overview_document_secondary">#99FFFFFF</item>
<item name="media_keyboard_button_color">@color/core_grey_25</item>
<item name="searchViewStyle">@style/TextSecure.BaseDarkTheme.SearchView</item>
@ -87,6 +84,7 @@
<item name="conversation_input_background">@drawable/compose_background_dark</item>
<item name="quick_camera_icon">@drawable/ic_baseline_photo_camera_24</item>
<item name="quick_mic_icon">@drawable/ic_baseline_mic_24</item>
</style>
<!-- This should be the default theme for the application. -->
@ -158,14 +156,7 @@
<item name="colorPrimary">@color/action_bar_background</item>
<item name="colorPrimaryDark">@color/action_bar_background</item>
<item name="recipient_preference_blocked">#d00000</item>
<item name="contact_selection_label_text">#66eeeeee</item>
<item name="contact_selection_push_user">#ffeeeeee</item>
<item name="contact_selection_lay_user">#afeeeeee</item>
<item name="contact_selection_header_text">#66eeeeee</item>
<item name="media_overview_toolbar_background">@color/transparent</item>
<item name="media_overview_toolbar_foreground">@color/white</item>
<item name="media_overview_header_foreground">@color/text</item>
<item name="theme_type">dark</item>
@ -175,8 +166,6 @@
<item name="attachment_document_icon_small">@drawable/ic_document_small_dark</item>
<item name="attachment_document_icon_large">@drawable/ic_document_large_dark</item>
<item name="compose_icon_tint">@color/core_grey_25</item>
<item name="conversation_list_item_background">@drawable/conversation_list_item_background_dark</item>
<item name="conversation_list_item_contact_color">#ffdddddd</item>
<item name="conversation_list_item_subject_color">#ffdddddd</item>
@ -194,22 +183,14 @@
<item name="conversation_item_sent_text_primary_color">@color/core_grey_05</item>
<item name="conversation_item_sent_text_secondary_color">@color/core_grey_25</item>
<item name="conversation_item_sent_icon_color">@color/core_grey_25</item>
<item name="conversation_item_sent_download_icon_color">@color/core_white</item>
<item name="conversation_item_sent_text_indicator_tab_color">#99ffffff</item>
<item name="conversation_item_received_text_primary_color">@color/text</item>
<item name="conversation_item_received_text_secondary_color">@color/text</item>
<item name="conversation_item_sent_indicator_text_background">@drawable/conversation_item_sent_indicator_text_shape_dark</item>
<item name="conversation_item_update_text_color">@color/core_grey_45</item>
<item name="conversation_item_last_seen_text_color">@color/core_grey_25</item>
<item name="conversation_item_last_seen_line_color">@color/core_grey_25</item>
<item name="conversation_item_date_line_color">@color/core_grey_45</item>
<item name="conversation_item_quote_text_color">@color/core_grey_05</item>
<item name="conversation_item_sticky_date_background">@drawable/sticky_date_header_background_dark</item>
<item name="conversation_item_sticky_date_text_color">@color/core_grey_45</item>
<item name="conversation_item_image_outline_color">@color/transparent_white_30</item>
<item name="contact_list_divider">@drawable/contact_list_divider_dark</item>
<item name="verification_background">@color/core_grey_95</item>
<item name="dialog_info_icon">@drawable/ic_info_outline_dark</item>
@ -217,12 +198,6 @@
<item name="device_link_item_card_background">@color/device_link_item_background_dark</item>
<item name="mediapicker_image_outline">@drawable/mediapicker_item_border_dark</item>
<item name="import_export_item_background_color">@color/import_export_item_background_dark</item>
<item name="import_export_item_background_shadow_color">@color/import_export_item_background_shadow_dark</item>
<item name="import_export_item_card_background">@drawable/clickable_card_dark</item>
<item name="fab_color">@color/textsecure_primary_dark</item>
<item name="lower_right_divet">@drawable/divet_lower_right_light</item>
@ -269,27 +244,9 @@
<item name="linkpreview_secondary_text_color">@color/text</item>
<item name="linkpreview_divider_color">@color/transparent</item>
<!-- <item name="quick_camera_icon">@drawable/ic_baseline_photo_camera_24</item>-->
<item name="quick_mic_icon">@drawable/ic_mic_white_24dp</item>
<item name="media_keyboard_button_color">@color/core_grey_25</item>
<item name="menu_new_conversation_icon">@drawable/ic_add_white_24dp</item>
<item name="menu_group_icon">@drawable/ic_group_white_24dp</item>
<item name="menu_search_icon">@drawable/ic_search_white_24dp</item>
<item name="menu_call_icon">@drawable/ic_call_white_24dp</item>
<item name="menu_unlock_icon">@drawable/ic_unlocked_white_24dp</item>
<item name="menu_lock_icon">@drawable/ic_lock_white_24dp</item>
<item name="menu_lock_icon_small">@drawable/ic_lock_white_18dp</item>
<item name="menu_accept_icon">@drawable/ic_check_white_24dp</item>
<item name="menu_refresh_directory">@drawable/ic_refresh_white_24dp</item>
<item name="menu_info_icon">@drawable/ic_info_outline_white_24dp</item>
<item name="conversation_icon_attach_audio">@drawable/ic_audio_dark</item>
<item name="conversation_icon_attach_video">@drawable/ic_video_dark</item>
<item name="reminder_header_background">@color/textsecure_primary_dark</item>
<item name="sticker_management_icon">@drawable/sticker_button_dark</item>
<item name="sticker_management_divider_color">@color/core_grey_75</item>
<item name="sticker_management_empty_background_color">@color/core_grey_85</item>
@ -303,15 +260,8 @@
<item name="pref_icon_tint">#FFFFFF</item>
<item name="pref_divider">@drawable/preference_divider_dark</item>
<item name="quote_missing_icon_color">@color/core_grey_05</item>
<item name="group_members_dialog_icon">@drawable/ic_group_white_24dp</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.Fix</item>
<item name="search_toolbar_background">@color/black</item>
<item name="search_background">@color/black</item>
<item name="invite_background">@color/black</item>
<item name="shared_contact_details_header_background">@color/grey_800</item>
<item name="shared_contact_details_titlebar">@color/grey_900</item>

View File

@ -8,4 +8,6 @@
<external-path name="external_video" path="Movies"/>
<external-path name="external_audio" path="Music"/>
<external-path name="external_download" path="Download"/>
<cache-path name="internal_cache" path="." />
</paths>

View File

@ -44,7 +44,7 @@
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:persistent="false"
app:numColumns="5" />
app:columns="5" />
</PreferenceCategory>
<PreferenceCategory android:layout="@layout/preference_divider"/>

View File

@ -16,18 +16,17 @@
*/
package org.thoughtcrime.securesms;
import android.app.Application;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import androidx.multidex.MultiDexApplication;
import com.google.firebase.iid.FirebaseInstanceId;
@ -116,10 +115,10 @@ import org.whispersystems.signalservice.loki.protocol.closedgroups.SharedSenderK
import org.whispersystems.signalservice.loki.protocol.mentions.MentionsManager;
import org.whispersystems.signalservice.loki.protocol.meta.SessionMetaProtocol;
import org.whispersystems.signalservice.loki.protocol.meta.TTLUtilities;
import org.whispersystems.signalservice.loki.protocol.sessionmanagement.SessionManagementProtocol;
import org.whispersystems.signalservice.loki.protocol.sessionmanagement.SessionManagementProtocolDelegate;
import org.whispersystems.signalservice.loki.protocol.shelved.multidevice.DeviceLink;
import org.whispersystems.signalservice.loki.protocol.shelved.multidevice.MultiDeviceProtocol;
import org.whispersystems.signalservice.loki.protocol.sessionmanagement.SessionManagementProtocol;
import org.whispersystems.signalservice.loki.protocol.sessionmanagement.SessionManagementProtocolDelegate;
import org.whispersystems.signalservice.loki.protocol.shelved.syncmessages.SyncMessagesProtocol;
import java.io.File;
@ -145,10 +144,11 @@ import static nl.komponents.kovenant.android.KovenantAndroid.stopKovenant;
*
* @author Moxie Marlinspike
*/
public class ApplicationContext extends Application implements DependencyInjector, DefaultLifecycleObserver, LokiP2PAPIDelegate,
public class ApplicationContext extends MultiDexApplication implements DependencyInjector, DefaultLifecycleObserver, LokiP2PAPIDelegate,
SessionManagementProtocolDelegate, SharedSenderKeysImplementationDelegate {
private static final String TAG = ApplicationContext.class.getSimpleName();
private final static int OK_HTTP_CACHE_SIZE = 10 * 1024 * 1024; // 10 MB
private ExpiringMessageManager expiringMessageManager;
private TypingStatusRepository typingStatusRepository;

View File

@ -215,7 +215,6 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Inje
this.avatar.setOnClickListener(view -> Permissions.with(this)
.request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
.ifNecessary()
.onAnyResult(this::startAvatarSelection)
.execute());

View File

@ -98,7 +98,6 @@ public class DeviceActivity extends PassphraseRequiredActionBarActivity
public void onClick(View v) {
Permissions.with(this)
.request(Manifest.permission.CAMERA)
.ifNecessary()
.withPermanentDenialDialog(getString(R.string.DeviceActivity_signal_needs_the_camera_permission_in_order_to_scan_a_qr_code))
.onAllGranted(() -> {
getSupportFragmentManager().beginTransaction()

View File

@ -16,7 +16,6 @@
*/
package org.thoughtcrime.securesms;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
@ -324,17 +323,19 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity {
}
@SuppressWarnings("CodeBlock2Expr")
@SuppressLint({"InlinedApi","StaticFieldLeak"})
@SuppressLint({"InlinedApi", "StaticFieldLeak"})
private void handleSaveMedia(@NonNull Collection<MediaDatabase.MediaRecord> mediaRecords) {
final Context context = getContext();
SaveAttachmentTask.showWarningDialog(context, (dialogInterface, which) -> {
Permissions.with(this)
.request(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
.ifNecessary()
.request(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
.maxSdkVersion(Build.VERSION_CODES.P)
.withPermanentDenialDialog(getString(R.string.MediaPreviewActivity_signal_needs_the_storage_permission_in_order_to_write_to_external_storage_but_it_has_been_permanently_denied))
.onAnyDenied(() -> Toast.makeText(getContext(), R.string.MediaPreviewActivity_unable_to_write_to_external_storage_without_permission, Toast.LENGTH_LONG).show())
.onAllGranted(() -> {
new ProgressDialogAsyncTask<Void, Void, List<SaveAttachmentTask.Attachment>>(context,
new ProgressDialogAsyncTask<Void, Void, List<SaveAttachmentTask.Attachment>>(
context,
R.string.MediaOverviewActivity_collecting_attachments,
R.string.please_wait) {
@Override
@ -356,8 +357,7 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity {
@Override
protected void onPostExecute(List<SaveAttachmentTask.Attachment> attachments) {
super.onPostExecute(attachments);
SaveAttachmentTask saveTask = new SaveAttachmentTask(context,
attachments.size());
SaveAttachmentTask saveTask = new SaveAttachmentTask(context, attachments.size());
saveTask.executeOnExecutor(THREAD_POOL_EXECUTOR,
attachments.toArray(new SaveAttachmentTask.Attachment[attachments.size()]));
actionMode.finish();

View File

@ -16,17 +16,16 @@
*/
package org.thoughtcrime.securesms;
import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
@ -341,23 +340,24 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
@SuppressLint("InlinedApi")
private void saveToDisk() {
MediaItem mediaItem = getCurrentMediaItem();
if (mediaItem == null) return;
if (mediaItem != null) {
SaveAttachmentTask.showWarningDialog(this, (dialogInterface, i) -> {
Permissions.with(this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
.ifNecessary()
.request(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
.maxSdkVersion(Build.VERSION_CODES.P)
.withPermanentDenialDialog(getString(R.string.MediaPreviewActivity_signal_needs_the_storage_permission_in_order_to_write_to_external_storage_but_it_has_been_permanently_denied))
.onAnyDenied(() -> Toast.makeText(this, R.string.MediaPreviewActivity_unable_to_write_to_external_storage_without_permission, Toast.LENGTH_LONG).show())
.onAllGranted(() -> {
SaveAttachmentTask saveTask = new SaveAttachmentTask(MediaPreviewActivity.this);
long saveDate = (mediaItem.date > 0) ? mediaItem.date : System.currentTimeMillis();
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, null));
saveTask.executeOnExecutor(
AsyncTask.THREAD_POOL_EXECUTOR,
new Attachment(mediaItem.uri, mediaItem.type, saveDate, null));
})
.execute();
});
}
}
@SuppressLint("StaticFieldLeak")
private void deleteMedia() {

View File

@ -23,9 +23,6 @@ import android.content.Intent;
import android.graphics.PorterDuff;
import android.os.Build;
import android.os.Bundle;
import androidx.core.hardware.fingerprint.FingerprintManagerCompat;
import androidx.core.os.CancellationSignal;
import androidx.appcompat.widget.Toolbar;
import android.text.Editable;
import android.text.InputType;
import android.text.SpannableString;
@ -49,6 +46,9 @@ import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.core.hardware.fingerprint.FingerprintManagerCompat;
import androidx.core.os.CancellationSignal;
import org.thoughtcrime.securesms.animation.AnimationCompleteListener;
import org.thoughtcrime.securesms.components.AnimatingToggle;
import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
@ -91,8 +91,6 @@ public class PassphrasePromptActivity extends PassphraseActivity {
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate()");
dynamicLanguage.onCreate(this);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
super.onCreate(savedInstanceState);
setContentView(R.layout.prompt_passphrase_activity);
@ -204,7 +202,6 @@ public class PassphrasePromptActivity extends PassphraseActivity {
private void initializeResources() {
ImageButton okButton = findViewById(R.id.ok_button);
Toolbar toolbar = findViewById(R.id.toolbar);
showButton = findViewById(R.id.passphrase_visibility);
hideButton = findViewById(R.id.passphrase_visibility_off);
@ -217,9 +214,6 @@ public class PassphrasePromptActivity extends PassphraseActivity {
fingerprintCancellationSignal = new CancellationSignal();
fingerprintListener = new FingerprintListener();
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("");
SpannableString hint = new SpannableString(" " + getString(R.string.PassphrasePromptActivity_enter_passphrase));
hint.setSpan(new RelativeSizeSpan(0.9f), 0, hint.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
hint.setSpan(new TypefaceSpan("sans-serif"), 0, hint.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
@ -229,8 +223,7 @@ public class PassphrasePromptActivity extends PassphraseActivity {
showButton.setOnClickListener(new ShowButtonOnClickListener());
hideButton.setOnClickListener(new HideButtonOnClickListener());
passphraseText.setOnEditorActionListener(new PassphraseActionListener());
passphraseText.setImeActionLabel(getString(R.string.prompt_passphrase_activity__unlock),
EditorInfo.IME_ACTION_DONE);
passphraseText.setImeActionLabel(getString(R.string.prompt_passphrase_activity__unlock), EditorInfo.IME_ACTION_DONE);
fingerprintPrompt.setImageResource(R.drawable.ic_fingerprint_white_48dp);
fingerprintPrompt.getBackground().setColorFilter(getResources().getColor(R.color.signal_primary), PorterDuff.Mode.SRC_IN);

View File

@ -76,6 +76,7 @@ import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
import org.whispersystems.signalservice.internal.push.LockedException;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@ -267,7 +268,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements Verif
@SuppressLint("StaticFieldLeak")
private void initializeBackupDetection() {
if (!Permissions.hasAll(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
if (!Permissions.hasAll(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
Log.i(TAG, "Skipping backup detection. We don't have the permission.");
return;
}
@ -278,7 +279,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements Verif
@Override
protected @Nullable BackupUtil.BackupInfo doInBackground(Void... voids) {
try {
return BackupUtil.getLatestBackup();
return BackupUtil.getLatestBackup(RegistrationActivity.this);
} catch (NoExternalStorageException e) {
Log.w(TAG, e);
return null;

View File

@ -172,7 +172,6 @@ public class VerifyIdentityActivity extends PassphraseRequiredActionBarActivity
public void onClick(View v) {
Permissions.with(this)
.request(Manifest.permission.CAMERA)
.ifNecessary()
.withPermanentDenialDialog(getString(R.string.VerifyIdentityActivity_signal_needs_the_camera_permission_in_order_to_scan_a_qr_code_but_it_has_been_permanently_denied))
.onAllGranted(() -> {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

View File

@ -164,7 +164,6 @@ public class WebRtcCallActivity extends Activity {
if (event != null) {
Permissions.with(this)
.request(Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA)
.ifNecessary()
.withRationaleDialog(getString(R.string.WebRtcCallActivity_to_answer_the_call_from_s_give_signal_access_to_your_microphone, event.getRecipient().toShortString()),
R.drawable.ic_mic_white_48dp, R.drawable.ic_videocam_white_48dp)
.withPermanentDenialDialog(getString(R.string.WebRtcCallActivity_signal_requires_microphone_and_camera_permissions_in_order_to_make_or_receive_calls))

View File

@ -4,9 +4,11 @@ import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
@ -14,9 +16,9 @@ import androidx.core.content.ContextCompat;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.database.NoExternalStorageException;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.util.ExternalStorageUtil;
import org.thoughtcrime.securesms.util.FileProviderUtil;
import org.thoughtcrime.securesms.util.IntentUtils;
@ -25,18 +27,20 @@ import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import network.loki.messenger.R;
import static android.provider.MediaStore.EXTRA_OUTPUT;
public final class AvatarSelection {
private static final String TAG = AvatarSelection.class.getSimpleName();
private AvatarSelection() {
}
public static final int REQUEST_CODE_CROP_IMAGE = CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE;
public static final int REQUEST_CODE_AVATAR = REQUEST_CODE_CROP_IMAGE + 1;
private AvatarSelection() {
}
/**
* Returns result on {@link #REQUEST_CODE_CROP_IMAGE}
*/
@ -64,15 +68,13 @@ public final class AvatarSelection {
*/
public static File startAvatarSelection(Activity activity, boolean includeClear, boolean attemptToIncludeCamera) {
File captureFile = null;
if (attemptToIncludeCamera) {
if (Permissions.hasAll(activity, Manifest.permission.CAMERA)) {
boolean hasCameraPermission = ContextCompat
.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
if (attemptToIncludeCamera && hasCameraPermission) {
try {
captureFile = File.createTempFile("capture", "jpg", activity.getExternalCacheDir());
} catch (IOException e) {
Log.w(TAG, e);
captureFile = null;
}
captureFile = File.createTempFile("avatar-capture", ".jpg", ExternalStorageUtil.getImageDir(activity));
} catch (IOException | NoExternalStorageException e) {
Log.e("Cannot reserve a temporary avatar capture file.", e);
}
}
@ -84,7 +86,6 @@ public final class AvatarSelection {
private static Intent createAvatarSelectionIntent(Context context, @Nullable File tempCaptureFile, boolean includeClear) {
List<Intent> extraIntents = new LinkedList<>();
Intent galleryIntent = new Intent(Intent.ACTION_PICK);
galleryIntent.setDataAndType(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");
if (!IntentUtils.isResolvable(context, galleryIntent)) {
@ -93,13 +94,12 @@ public final class AvatarSelection {
}
if (tempCaptureFile != null) {
Uri uri = FileProviderUtil.getUriFor(context, tempCaptureFile);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(context.getPackageManager()) != null) {
cameraIntent.putExtra(EXTRA_OUTPUT, FileProviderUtil.getUriFor(context, tempCaptureFile));
cameraIntent.putExtra(EXTRA_OUTPUT, uri);
cameraIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
extraIntents.add(cameraIntent);
}
}
if (includeClear) {
extraIntents.add(new Intent("network.loki.securesms.action.CLEAR_PROFILE_PHOTO"));

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