mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Compare commits
19 Commits
1233-remot
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39478a7914 | ||
|
|
112e71a9cb | ||
|
|
5650bef310 | ||
|
|
2a87171c49 | ||
|
|
15cb5409e7 | ||
|
|
fd07dc006d | ||
|
|
cc87c4e37d | ||
|
|
4a10e876f6 | ||
|
|
fad0057c4a | ||
|
|
5aabfcea9a | ||
|
|
f7d928c774 | ||
|
|
bd983d9796 | ||
|
|
de8d1b7d96 | ||
|
|
9155f62d0b | ||
|
|
c2b7f85b8e | ||
|
|
ae81eb3737 | ||
|
|
60d949c342 | ||
|
|
1c90e64894 | ||
|
|
f0e2d5281f |
@@ -9,8 +9,8 @@ android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 26
|
||||
versionCode 10101
|
||||
versionName "1.1.1"
|
||||
versionCode 10102
|
||||
versionName "1.1.2"
|
||||
consumerProguardFiles 'proguard-rules.txt'
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -159,7 +159,8 @@ class AccountManagerImpl implements AccountManager {
|
||||
@Override
|
||||
public boolean createAccount(String name, String password) {
|
||||
synchronized (stateChangeLock) {
|
||||
// TODO don't allow creating another account if one already exists
|
||||
if (hasDatabaseKey())
|
||||
throw new AssertionError("Already have a database key");
|
||||
LocalAuthor localAuthor = identityManager.createLocalAuthor(name);
|
||||
identityManager.registerLocalAuthor(localAuthor);
|
||||
SecretKey key = crypto.generateSecretKey();
|
||||
@@ -182,6 +183,7 @@ class AccountManagerImpl implements AccountManager {
|
||||
LOG.info("Deleting account");
|
||||
IoUtils.deleteFileOrDir(databaseConfig.getDatabaseKeyDirectory());
|
||||
IoUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
|
||||
databaseKey = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,65 +2,6 @@ apply plugin: 'com.android.application'
|
||||
apply plugin: 'witness'
|
||||
apply from: 'witness.gradle'
|
||||
|
||||
dependencies {
|
||||
implementation project(path: ':briar-core', configuration: 'default')
|
||||
implementation project(path: ':bramble-core', configuration: 'default')
|
||||
implementation project(':bramble-android')
|
||||
|
||||
def supportVersion = '27.1.1'
|
||||
implementation "com.android.support:support-v4:$supportVersion"
|
||||
implementation("com.android.support:appcompat-v7:$supportVersion") {
|
||||
exclude module: 'support-v4'
|
||||
}
|
||||
implementation("com.android.support:preference-v14:$supportVersion") {
|
||||
exclude module: 'support-v4'
|
||||
}
|
||||
implementation("com.android.support:design:$supportVersion") {
|
||||
exclude module: 'support-v4'
|
||||
exclude module: 'recyclerview-v7'
|
||||
}
|
||||
implementation "com.android.support:cardview-v7:$supportVersion"
|
||||
implementation "com.android.support:support-annotations:$supportVersion"
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||
|
||||
implementation('ch.acra:acra:4.9.1') {
|
||||
exclude module: 'support-v4'
|
||||
exclude module: 'support-annotations'
|
||||
}
|
||||
implementation 'info.guardianproject.panic:panic:0.5'
|
||||
implementation 'info.guardianproject.trustedintents:trustedintents:0.2'
|
||||
implementation 'de.hdodenhof:circleimageview:2.2.0'
|
||||
implementation 'com.google.zxing:core:3.3.0'
|
||||
implementation 'uk.co.samuelwall:material-tap-target-prompt:2.8.0'
|
||||
implementation 'com.vanniktech:emoji-google:0.5.1'
|
||||
|
||||
annotationProcessor 'com.google.dagger:dagger-compiler:2.0.2'
|
||||
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
|
||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||
testImplementation project(path: ':bramble-core', configuration: 'testOutput')
|
||||
testImplementation 'org.robolectric:robolectric:3.8'
|
||||
testImplementation 'org.robolectric:shadows-support-v4:3.3.2'
|
||||
testImplementation 'org.mockito:mockito-core:2.13.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation "org.jmock:jmock:2.8.2"
|
||||
testImplementation "org.jmock:jmock-junit4:2.8.2"
|
||||
testImplementation "org.jmock:jmock-legacy:2.8.2"
|
||||
testImplementation "org.hamcrest:hamcrest-library:1.3"
|
||||
testImplementation "org.hamcrest:hamcrest-core:1.3"
|
||||
|
||||
def espressoVersion = '3.0.2'
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-core:$espressoVersion"
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-contrib:$espressoVersion"
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-intents:$espressoVersion"
|
||||
androidTestImplementation "tools.fastlane:screengrab:1.1.0"
|
||||
androidTestImplementation "com.android.support.test.uiautomator:uiautomator-v18:2.1.3"
|
||||
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:2.0.2"
|
||||
androidTestCompileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
androidTestImplementation 'junit:junit:4.12'
|
||||
}
|
||||
|
||||
def getStdout = { command, defaultValue ->
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
try {
|
||||
@@ -81,15 +22,15 @@ android {
|
||||
defaultConfig {
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 26
|
||||
versionCode 10101
|
||||
versionName "1.1.1"
|
||||
versionCode 10102
|
||||
versionName "1.1.2"
|
||||
applicationId "org.briarproject.briar.android"
|
||||
buildConfigField "String", "GitHash",
|
||||
"\"${getStdout(['git', 'rev-parse', '--short=7', 'HEAD'], 'No commit hash')}\""
|
||||
def now = (long) (System.currentTimeMillis() / 1000)
|
||||
buildConfigField "Long", "BuildTimestamp",
|
||||
"${getStdout(['git', 'log', '-n', '1', '--format=%ct'], now)}000L"
|
||||
testInstrumentationRunner 'org.briarproject.briar.android.test.BriarTestRunner'
|
||||
testInstrumentationRunner 'org.briarproject.briar.android.BriarTestRunner'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -144,6 +85,65 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(path: ':briar-core', configuration: 'default')
|
||||
implementation project(path: ':bramble-core', configuration: 'default')
|
||||
implementation project(':bramble-android')
|
||||
|
||||
def supportVersion = '27.1.1'
|
||||
implementation "com.android.support:support-v4:$supportVersion"
|
||||
implementation("com.android.support:appcompat-v7:$supportVersion") {
|
||||
exclude module: 'support-v4'
|
||||
}
|
||||
implementation("com.android.support:preference-v14:$supportVersion") {
|
||||
exclude module: 'support-v4'
|
||||
}
|
||||
implementation("com.android.support:design:$supportVersion") {
|
||||
exclude module: 'support-v4'
|
||||
exclude module: 'recyclerview-v7'
|
||||
}
|
||||
implementation "com.android.support:cardview-v7:$supportVersion"
|
||||
implementation "com.android.support:support-annotations:$supportVersion"
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||
|
||||
implementation('ch.acra:acra:4.9.1') {
|
||||
exclude module: 'support-v4'
|
||||
exclude module: 'support-annotations'
|
||||
}
|
||||
implementation 'info.guardianproject.panic:panic:0.5'
|
||||
implementation 'info.guardianproject.trustedintents:trustedintents:0.2'
|
||||
implementation 'de.hdodenhof:circleimageview:2.2.0'
|
||||
implementation 'com.google.zxing:core:3.3.0'
|
||||
implementation 'uk.co.samuelwall:material-tap-target-prompt:2.8.0'
|
||||
implementation 'com.vanniktech:emoji-google:0.5.1'
|
||||
|
||||
annotationProcessor 'com.google.dagger:dagger-compiler:2.0.2'
|
||||
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
|
||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||
testImplementation project(path: ':bramble-core', configuration: 'testOutput')
|
||||
testImplementation 'org.robolectric:robolectric:3.8'
|
||||
testImplementation 'org.robolectric:shadows-support-v4:3.3.2'
|
||||
testImplementation 'org.mockito:mockito-core:2.13.0'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation "org.jmock:jmock:2.8.2"
|
||||
testImplementation "org.jmock:jmock-junit4:2.8.2"
|
||||
testImplementation "org.jmock:jmock-legacy:2.8.2"
|
||||
testImplementation "org.hamcrest:hamcrest-library:1.3"
|
||||
testImplementation "org.hamcrest:hamcrest-core:1.3"
|
||||
|
||||
def espressoVersion = '3.0.2'
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-core:$espressoVersion"
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-contrib:$espressoVersion"
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-intents:$espressoVersion"
|
||||
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:2.0.2"
|
||||
androidTestCompileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
androidTestImplementation 'junit:junit:4.12'
|
||||
androidTestScreenshotImplementation "tools.fastlane:screengrab:1.2.0"
|
||||
androidTestScreenshotImplementation "com.android.support.test.uiautomator:uiautomator-v18:2.1.3"
|
||||
}
|
||||
|
||||
task verifyTranslations {
|
||||
doLast {
|
||||
def file = project.file("src/main/res/values/arrays.xml")
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
app_package_name "org.briarproject.briar.android.screenshot.debug"
|
||||
locales ['en-US']
|
||||
use_tests_in_classes([
|
||||
'org.briarproject.briar.android.login.SetupActivityScreenshotTest',
|
||||
'org.briarproject.briar.android.settings.SettingsActivityScreenshotTest',
|
||||
])
|
||||
app_apk_path "build/outputs/apk/screenshot/debug/briar-android-screenshot-debug.apk"
|
||||
tests_apk_path "build/outputs/apk/androidTest/screenshot/debug/briar-android-screenshot-debug-androidTest.apk"
|
||||
test_instrumentation_runner "org.briarproject.briar.android.test.BriarTestRunner"
|
||||
test_instrumentation_runner "org.briarproject.briar.android.BriarTestRunner"
|
||||
reinstall_app = true
|
||||
exit_on_test_failure = true
|
||||
@@ -4,4 +4,8 @@ adb shell am broadcast -a com.android.systemui.demo -e command enter
|
||||
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
|
||||
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100
|
||||
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show
|
||||
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1337
|
||||
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1337
|
||||
|
||||
# workaround for Android Pie hidden API Espresso bug
|
||||
adb shell settings put global hidden_api_policy_pre_p_apps 1
|
||||
adb shell settings put global hidden_api_policy_p_apps 1
|
||||
|
||||
@@ -12,4 +12,4 @@
|
||||
-keep class junit.** { *; }
|
||||
-dontwarn junit.**
|
||||
|
||||
-dontwarn org.briarproject.briar.android.BriarTestComponentApplication
|
||||
-dontwarn org.briarproject.briar.android.**
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package org.briarproject.briar.android.test;
|
||||
package org.briarproject.briar.android;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.support.test.runner.AndroidJUnitRunner;
|
||||
|
||||
import org.briarproject.briar.android.BriarTestComponentApplication;
|
||||
|
||||
public class BriarTestRunner extends AndroidJUnitRunner {
|
||||
|
||||
@Override
|
||||
@@ -13,8 +11,8 @@ public class BriarTestRunner extends AndroidJUnitRunner {
|
||||
Context context)
|
||||
throws InstantiationException, IllegalAccessException,
|
||||
ClassNotFoundException {
|
||||
return super.newApplication(cl, BriarTestComponentApplication.class.getName(),
|
||||
context);
|
||||
return super.newApplication(cl,
|
||||
BriarTestComponentApplication.class.getName(), context);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package org.briarproject.briar.android;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||
|
||||
import org.briarproject.bramble.api.account.AccountManager;
|
||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.briar.R;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static android.support.test.InstrumentationRegistry.getTargetContext;
|
||||
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public abstract class UiTest {
|
||||
|
||||
protected final String USERNAME =
|
||||
getTargetContext().getString(R.string.screenshot_alice);
|
||||
protected static final String PASSWORD = "123456";
|
||||
|
||||
@Inject
|
||||
protected AccountManager accountManager;
|
||||
@Inject
|
||||
protected LifecycleManager lifecycleManager;
|
||||
|
||||
public UiTest() {
|
||||
BriarTestComponentApplication app =
|
||||
(BriarTestComponentApplication) getTargetContext()
|
||||
.getApplicationContext();
|
||||
inject((BriarUiTestComponent) app.getApplicationComponent());
|
||||
}
|
||||
|
||||
protected abstract void inject(BriarUiTestComponent component);
|
||||
|
||||
@NotNullByDefault
|
||||
protected class CleanAccountTestRule<A extends Activity>
|
||||
extends IntentsTestRule<A> {
|
||||
|
||||
@Nullable
|
||||
private final Runnable runnable;
|
||||
|
||||
public CleanAccountTestRule(Class<A> activityClass) {
|
||||
super(activityClass);
|
||||
this.runnable = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this if you need to run code before launching the activity.
|
||||
* Note: You need to use {@link #launchActivity(Intent)} yourself
|
||||
* to start the activity.
|
||||
*/
|
||||
public CleanAccountTestRule(Class<A> activityClass, Runnable runnable) {
|
||||
super(activityClass, false, false);
|
||||
this.runnable = runnable;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void beforeActivityLaunched() {
|
||||
super.beforeActivityLaunched();
|
||||
accountManager.deleteAccount();
|
||||
accountManager.createAccount(USERNAME, PASSWORD);
|
||||
if (runnable != null) {
|
||||
Intent serviceIntent =
|
||||
new Intent(getTargetContext(), BriarService.class);
|
||||
getTargetContext().startService(serviceIntent);
|
||||
try {
|
||||
lifecycleManager.waitForStartup();
|
||||
} catch (InterruptedException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
runnable.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.briarproject.briar.android.test;
|
||||
package org.briarproject.briar.android;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.test.espresso.PerformException;
|
||||
@@ -1,73 +0,0 @@
|
||||
package org.briarproject.briar.android.test;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||
import android.util.Log;
|
||||
|
||||
import org.briarproject.bramble.api.account.AccountManager;
|
||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.briar.android.BriarTestComponentApplication;
|
||||
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||
import org.junit.ClassRule;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import tools.fastlane.screengrab.Screengrab;
|
||||
import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy;
|
||||
import tools.fastlane.screengrab.locale.LocaleTestRule;
|
||||
|
||||
import static android.support.test.InstrumentationRegistry.getTargetContext;
|
||||
import static tools.fastlane.screengrab.Screengrab.setDefaultScreenshotStrategy;
|
||||
|
||||
public abstract class ScreenshotTest {
|
||||
|
||||
@ClassRule
|
||||
public static final LocaleTestRule localeTestRule = new LocaleTestRule();
|
||||
|
||||
protected static final String USERNAME = "Alice";
|
||||
protected static final String PASSWORD = "123456";
|
||||
|
||||
@Inject
|
||||
protected AccountManager accountManager;
|
||||
@Inject
|
||||
protected LifecycleManager lifecycleManager;
|
||||
|
||||
public ScreenshotTest() {
|
||||
super();
|
||||
setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());
|
||||
BriarTestComponentApplication app =
|
||||
(BriarTestComponentApplication) getTargetContext()
|
||||
.getApplicationContext();
|
||||
inject((BriarUiTestComponent) app.getApplicationComponent());
|
||||
}
|
||||
|
||||
protected abstract void inject(BriarUiTestComponent component);
|
||||
|
||||
protected void screenshot(String name) {
|
||||
try {
|
||||
Screengrab.screenshot(name);
|
||||
} catch (RuntimeException e) {
|
||||
if (!e.getMessage().equals("Unable to capture screenshot."))
|
||||
throw e;
|
||||
// The tests should still pass when run from AndroidStudio
|
||||
// without manually granting permissions like fastlane does.
|
||||
Log.w("Screengrab", "Permission to write screenshot is missing.");
|
||||
}
|
||||
}
|
||||
|
||||
protected class CleanAccountTestRule<A extends Activity>
|
||||
extends IntentsTestRule<A> {
|
||||
|
||||
public CleanAccountTestRule(Class<A> activityClass) {
|
||||
super(activityClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void beforeActivityLaunched() {
|
||||
super.beforeActivityLaunched();
|
||||
accountManager.deleteAccount();
|
||||
accountManager.createAccount(USERNAME, PASSWORD);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.briarproject.briar.android;
|
||||
|
||||
import org.briarproject.bramble.BrambleAndroidModule;
|
||||
import org.briarproject.bramble.BrambleCoreModule;
|
||||
import org.briarproject.bramble.account.BriarAccountModule;
|
||||
import org.briarproject.briar.BriarCoreModule;
|
||||
import org.briarproject.briar.android.navdrawer.NavDrawerActivityTest;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Component;
|
||||
|
||||
@Singleton
|
||||
@Component(modules = {
|
||||
AppModule.class,
|
||||
BriarCoreModule.class,
|
||||
BrambleAndroidModule.class,
|
||||
BriarAccountModule.class,
|
||||
BrambleCoreModule.class
|
||||
})
|
||||
public interface BriarUiTestComponent extends AndroidComponent {
|
||||
|
||||
void inject(NavDrawerActivityTest test);
|
||||
|
||||
}
|
||||
@@ -6,8 +6,8 @@ import android.view.Gravity;
|
||||
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||
import org.briarproject.briar.android.UiTest;
|
||||
import org.briarproject.briar.android.settings.SettingsActivity;
|
||||
import org.briarproject.briar.android.test.ScreenshotTest;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -23,7 +23,7 @@ import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class NavDrawerActivityTest extends ScreenshotTest {
|
||||
public class NavDrawerActivityTest extends UiTest {
|
||||
|
||||
@Rule
|
||||
public CleanAccountTestRule<NavDrawerActivity> testRule =
|
||||
@@ -4,8 +4,7 @@ import org.briarproject.bramble.BrambleAndroidModule;
|
||||
import org.briarproject.bramble.BrambleCoreModule;
|
||||
import org.briarproject.bramble.account.BriarAccountModule;
|
||||
import org.briarproject.briar.BriarCoreModule;
|
||||
import org.briarproject.briar.android.login.SetupActivityScreenshotTest;
|
||||
import org.briarproject.briar.android.navdrawer.NavDrawerActivityTest;
|
||||
import org.briarproject.briar.android.contact.ConversationActivityScreenshotTest;
|
||||
import org.briarproject.briar.android.settings.SettingsActivityScreenshotTest;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
@@ -22,8 +21,9 @@ import dagger.Component;
|
||||
})
|
||||
public interface BriarUiTestComponent extends AndroidComponent {
|
||||
|
||||
void inject(SetupActivityScreenshotTest test);
|
||||
void inject(NavDrawerActivityTest test);
|
||||
void inject(SetupDataTest test);
|
||||
|
||||
void inject(ConversationActivityScreenshotTest test);
|
||||
void inject(SettingsActivityScreenshotTest test);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.briarproject.briar.android;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.util.Log;
|
||||
|
||||
import org.briarproject.bramble.api.plugin.ConnectionRegistry;
|
||||
import org.briarproject.bramble.api.system.Clock;
|
||||
import org.briarproject.briar.api.test.TestDataCreator;
|
||||
import org.junit.ClassRule;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import tools.fastlane.screengrab.FalconScreenshotStrategy;
|
||||
import tools.fastlane.screengrab.Screengrab;
|
||||
import tools.fastlane.screengrab.locale.LocaleTestRule;
|
||||
|
||||
public abstract class ScreenshotTest extends UiTest {
|
||||
|
||||
@ClassRule
|
||||
public static final LocaleTestRule localeTestRule = new LocaleTestRule();
|
||||
|
||||
@Inject
|
||||
protected TestDataCreator testDataCreator;
|
||||
@Inject
|
||||
protected ConnectionRegistry connectionRegistry;
|
||||
@Inject
|
||||
protected Clock clock;
|
||||
|
||||
protected void screenshot(String name, Activity activity) {
|
||||
try {
|
||||
Screengrab.screenshot(name, new FalconScreenshotStrategy(activity));
|
||||
} catch (RuntimeException e) {
|
||||
if (!e.getMessage().equals("Unable to capture screenshot."))
|
||||
throw e;
|
||||
// The tests should still pass when run from AndroidStudio
|
||||
// without manually granting permissions like fastlane does.
|
||||
Log.w("Screengrab", "Permission to write screenshot is missing.");
|
||||
}
|
||||
}
|
||||
|
||||
protected long getMinutesAgo(int minutes) {
|
||||
return clock.currentTimeMillis() - minutes * 60 * 1000;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.briarproject.briar.android.login;
|
||||
package org.briarproject.briar.android;
|
||||
|
||||
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
@@ -6,9 +6,12 @@ import android.support.test.uiautomator.UiDevice;
|
||||
import android.support.test.uiautomator.UiObject;
|
||||
import android.support.test.uiautomator.UiSelector;
|
||||
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.bramble.api.contact.Contact;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||
import org.briarproject.briar.android.test.ScreenshotTest;
|
||||
import org.briarproject.briar.android.login.OpenDatabaseActivity;
|
||||
import org.briarproject.briar.android.login.SetupActivity;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -26,14 +29,14 @@ import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static android.support.test.runner.lifecycle.Stage.PAUSED;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static org.briarproject.briar.android.test.ViewActions.waitForActivity;
|
||||
import static org.briarproject.briar.android.test.ViewActions.waitUntilMatches;
|
||||
import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
|
||||
import static org.briarproject.briar.android.ViewActions.waitForActivity;
|
||||
import static org.briarproject.briar.android.ViewActions.waitUntilMatches;
|
||||
import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class SetupActivityScreenshotTest extends ScreenshotTest {
|
||||
public class SetupDataTest extends ScreenshotTest {
|
||||
|
||||
@Rule
|
||||
public IntentsTestRule<SetupActivity> testRule =
|
||||
@@ -61,7 +64,7 @@ public class SetupActivityScreenshotTest extends ScreenshotTest {
|
||||
onView(withId(R.id.nickname_entry))
|
||||
.perform(waitUntilMatches(withText(USERNAME)));
|
||||
|
||||
screenshot("manual_create_account");
|
||||
screenshot("manual_create_account", testRule.getActivity());
|
||||
|
||||
onView(withId(R.id.next))
|
||||
.check(matches(isDisplayed()))
|
||||
@@ -94,13 +97,54 @@ public class SetupActivityScreenshotTest extends ScreenshotTest {
|
||||
}
|
||||
|
||||
// wait for OpenDatabaseActivity to show up
|
||||
onView(withId(R.id.progress))
|
||||
.check(matches(isDisplayed()));
|
||||
onView(isRoot())
|
||||
.perform(waitForActivity(testRule.getActivity(), PAUSED));
|
||||
intended(hasComponent(OpenDatabaseActivity.class.getName()));
|
||||
|
||||
assertTrue(accountManager.hasDatabaseKey());
|
||||
|
||||
lifecycleManager.waitForStartup();
|
||||
createTestData();
|
||||
|
||||
// close expiry warning
|
||||
onView(withId(R.id.expiryWarning))
|
||||
.perform(waitUntilMatches(isDisplayed()));
|
||||
onView(withId(R.id.expiryWarningClose))
|
||||
.check(matches(isDisplayed()));
|
||||
onView(withId(R.id.expiryWarningClose))
|
||||
.perform(click());
|
||||
}
|
||||
|
||||
private void createTestData() {
|
||||
try {
|
||||
createTestDataExceptions();
|
||||
} catch (DbException | FormatException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void createTestDataExceptions()
|
||||
throws DbException, FormatException {
|
||||
String bobName =
|
||||
getTargetContext().getString(R.string.screenshot_bob);
|
||||
Contact bob = testDataCreator.addContact(bobName);
|
||||
|
||||
String bobHi = getTargetContext()
|
||||
.getString(R.string.screenshot_message_1);
|
||||
long bobTime = getMinutesAgo(2);
|
||||
testDataCreator.addPrivateMessage(bob, bobHi, bobTime, true);
|
||||
|
||||
String aliceHi = getTargetContext()
|
||||
.getString(R.string.screenshot_message_2);
|
||||
long aliceTime = getMinutesAgo(1);
|
||||
testDataCreator.addPrivateMessage(bob, aliceHi, aliceTime, false);
|
||||
|
||||
String bobHi2 = getTargetContext()
|
||||
.getString(R.string.screenshot_message_3);
|
||||
long bobTime2 = getMinutesAgo(0);
|
||||
testDataCreator.addPrivateMessage(bob, bobHi2, bobTime2, true);
|
||||
|
||||
connectionRegistry.registerConnection(bob.getId(), ID, true);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package org.briarproject.briar.android.contact;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.test.rule.ActivityTestRule;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||
import org.briarproject.briar.android.ScreenshotTest;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static android.support.test.InstrumentationRegistry.getInstrumentation;
|
||||
import static android.support.test.espresso.Espresso.onView;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static org.briarproject.briar.android.ViewActions.waitUntilMatches;
|
||||
import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
|
||||
import static org.hamcrest.Matchers.allOf;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ConversationActivityScreenshotTest extends ScreenshotTest {
|
||||
|
||||
@Rule
|
||||
public ActivityTestRule<ConversationActivity> testRule =
|
||||
new ActivityTestRule<>(ConversationActivity.class, false, false);
|
||||
|
||||
@Override
|
||||
protected void inject(BriarUiTestComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void messaging() throws Exception {
|
||||
Context targetContext = getInstrumentation().getTargetContext();
|
||||
Intent intent = new Intent(targetContext, ConversationActivity.class);
|
||||
intent.putExtra(CONTACT_ID, 1);
|
||||
testRule.launchActivity(intent);
|
||||
|
||||
onView(withId(R.id.conversationView))
|
||||
.perform(waitUntilMatches(allOf(
|
||||
withText(R.string.screenshot_message_3),
|
||||
isCompletelyDisplayed())
|
||||
));
|
||||
|
||||
screenshot("manual_messaging", testRule.getActivity());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,14 +2,15 @@ package org.briarproject.briar.android.settings;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.test.espresso.contrib.DrawerActions;
|
||||
import android.support.test.rule.ActivityTestRule;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.Gravity;
|
||||
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.BriarUiTestComponent;
|
||||
import org.briarproject.briar.android.ScreenshotTest;
|
||||
import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
|
||||
import org.briarproject.briar.android.test.ScreenshotTest;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -26,15 +27,15 @@ import static android.support.test.espresso.matcher.ViewMatchers.withChild;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static org.briarproject.briar.android.test.ViewActions.waitUntilMatches;
|
||||
import static org.briarproject.briar.android.ViewActions.waitUntilMatches;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class SettingsActivityScreenshotTest extends ScreenshotTest {
|
||||
|
||||
@Rule
|
||||
public CleanAccountTestRule<SettingsActivity> testRule =
|
||||
new CleanAccountTestRule<>(SettingsActivity.class);
|
||||
public ActivityTestRule<SettingsActivity> testRule =
|
||||
new ActivityTestRule<>(SettingsActivity.class);
|
||||
|
||||
@Override
|
||||
protected void inject(BriarUiTestComponent component) {
|
||||
@@ -46,7 +47,7 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
|
||||
onView(withText(R.string.settings_button))
|
||||
.check(matches(isDisplayed()));
|
||||
|
||||
screenshot("manual_dark_theme_settings");
|
||||
screenshot("manual_dark_theme_settings", testRule.getActivity());
|
||||
|
||||
// switch to dark theme
|
||||
onView(withText(R.string.pref_theme_title))
|
||||
@@ -56,10 +57,20 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
|
||||
.check(matches(isDisplayed()))
|
||||
.perform(click());
|
||||
|
||||
// open nav drawer and remove expiry warning
|
||||
openNavDrawer(true);
|
||||
openNavDrawer();
|
||||
|
||||
screenshot("manual_dark_theme_nav_drawer");
|
||||
screenshot("manual_dark_theme_nav_drawer", testRule.getActivity());
|
||||
|
||||
// switch to back to light theme
|
||||
onView(withText(R.string.settings_button))
|
||||
.check(matches(isDisplayed()))
|
||||
.perform(click());
|
||||
onView(withText(R.string.pref_theme_title))
|
||||
.check(matches(isDisplayed()))
|
||||
.perform(click());
|
||||
onView(withText(R.string.pref_theme_light))
|
||||
.check(matches(isDisplayed()))
|
||||
.perform(click());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -83,12 +94,11 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
|
||||
.check(matches(isDisplayed()))
|
||||
.check(matches(isEnabled()));
|
||||
|
||||
screenshot("manual_app_lock");
|
||||
screenshot("manual_app_lock", testRule.getActivity());
|
||||
|
||||
// no more expiry warning to remove, because sharedprefs cached?
|
||||
openNavDrawer(false);
|
||||
openNavDrawer();
|
||||
|
||||
screenshot("manual_app_lock_nav_drawer");
|
||||
screenshot("manual_app_lock_nav_drawer", testRule.getActivity());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -104,23 +114,15 @@ public class SettingsActivityScreenshotTest extends ScreenshotTest {
|
||||
.check(matches(isDisplayed()))
|
||||
.perform(waitUntilMatches(isEnabled()));
|
||||
|
||||
screenshot("manual_tor_settings");
|
||||
screenshot("manual_tor_settings", testRule.getActivity());
|
||||
}
|
||||
|
||||
private void openNavDrawer(boolean expiry) {
|
||||
private void openNavDrawer() {
|
||||
// start main activity
|
||||
Intent i =
|
||||
new Intent(testRule.getActivity(), NavDrawerActivity.class);
|
||||
testRule.getActivity().startActivity(i);
|
||||
|
||||
// close expiry warning
|
||||
if (expiry) {
|
||||
onView(withId(R.id.expiryWarningClose))
|
||||
.check(matches(isDisplayed()));
|
||||
onView(withId(R.id.expiryWarningClose))
|
||||
.perform(click());
|
||||
}
|
||||
|
||||
// open navigation drawer
|
||||
onView(withId(R.id.drawer_layout))
|
||||
.check(matches(isClosed(Gravity.START)))
|
||||
@@ -0,0 +1,84 @@
|
||||
package org.briarproject.briar.android.panic;
|
||||
|
||||
import info.guardianproject.trustedintents.ApkSignaturePin;
|
||||
|
||||
// needs to be public, because TrustedIntents will instantiate
|
||||
public final class FDroidSignaturePin extends ApkSignaturePin {
|
||||
|
||||
public FDroidSignaturePin() {
|
||||
this.fingerprints = new String[] {
|
||||
"927f7e38b6acbecd84e02dace33efa9a7a2f0979750f28f585688ee38b3a4e28"};
|
||||
this.certificates = new byte[][] {
|
||||
{48, -126, 3, 95, 48, -126, 2, 71, -96, 3, 2, 1, 2, 2, 4, 28,
|
||||
-30, 107, -102, 48, 13, 6, 9, 42, -122, 72, -122, -9,
|
||||
13, 1, 1, 11, 5, 0, 48, 96, 49, 11, 48, 9, 6, 3, 85, 4,
|
||||
6, 19, 2, 85, 75, 49, 12, 48, 10, 6, 3, 85, 4, 8, 19, 3,
|
||||
79, 82, 71, 49, 12, 48, 10, 6, 3, 85, 4, 7, 19, 3, 79,
|
||||
82, 71, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 102,
|
||||
100, 114, 111, 105, 100, 46, 111, 114, 103, 49, 15, 48,
|
||||
13, 6, 3, 85, 4, 11, 19, 6, 70, 68, 114, 111, 105, 100,
|
||||
49, 15, 48, 13, 6, 3, 85, 4, 3, 19, 6, 70, 68, 114, 111,
|
||||
105, 100, 48, 30, 23, 13, 49, 55, 49, 50, 48, 55, 49,
|
||||
55, 51, 48, 52, 50, 90, 23, 13, 52, 53, 48, 52, 50, 52,
|
||||
49, 55, 51, 48, 52, 50, 90, 48, 96, 49, 11, 48, 9, 6, 3,
|
||||
85, 4, 6, 19, 2, 85, 75, 49, 12, 48, 10, 6, 3, 85, 4, 8,
|
||||
19, 3, 79, 82, 71, 49, 12, 48, 10, 6, 3, 85, 4, 7, 19,
|
||||
3, 79, 82, 71, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10,
|
||||
102, 100, 114, 111, 105, 100, 46, 111, 114, 103, 49, 15,
|
||||
48, 13, 6, 3, 85, 4, 11, 19, 6, 70, 68, 114, 111, 105,
|
||||
100, 49, 15, 48, 13, 6, 3, 85, 4, 3, 19, 6, 70, 68, 114,
|
||||
111, 105, 100, 48, -126, 1, 34, 48, 13, 6, 9, 42, -122,
|
||||
72, -122, -9, 13, 1, 1, 1, 5, 0, 3, -126, 1, 15, 0, 48,
|
||||
-126, 1, 10, 2, -126, 1, 1, 0, -107, -115, -106, 1, -26,
|
||||
72, -105, -99, 62, 3, -55, 34, 99, -112, -68, -20, -115,
|
||||
31, 34, 118, -50, 12, -32, -59, 74, -58, -37, -87, 21,
|
||||
105, 36, -82, 13, -51, 66, 4, 55, -111, 13, -46, -7,
|
||||
-69, -15, 36, 118, -7, 101, -86, 123, -83, -103, 110,
|
||||
116, -54, 112, 46, 12, 96, -76, -48, -70, -33, -81, 52,
|
||||
59, 73, 107, -126, -72, -25, 32, 93, 29, -20, 5, -41,
|
||||
-27, 123, -9, 104, -31, -59, -1, -83, -93, 99, 85, -116,
|
||||
-62, -55, 18, -63, 6, -51, -110, 33, 9, 7, -49, 102,
|
||||
-20, -122, -124, -68, 93, -102, 31, 48, 86, 96, -99,
|
||||
105, -52, 95, 12, 57, 99, 12, -24, 70, 40, -99, -20,
|
||||
-21, -85, -70, -105, 95, 117, -31, 126, -126, -39, 46,
|
||||
-62, 59, -23, -74, 108, -12, -56, -40, -96, 79, -37,
|
||||
-82, 1, 99, -104, 48, -60, 92, 14, 109, 127, -22, 31,
|
||||
115, -27, 108, 9, 92, 118, -45, 103, 117, 57, -50, -82,
|
||||
114, -113, 68, -82, 87, 96, 111, 72, 65, -63, 12, 31,
|
||||
-34, -31, -55, -101, 101, 101, 59, 73, -119, -122, 82,
|
||||
28, 47, -108, -85, 59, 46, 89, -93, -1, 9, -11, -51, 63,
|
||||
-44, 109, -76, -103, -26, -49, -80, 6, 52, -27, 73,
|
||||
-104, 40, 2, -101, -124, 60, -52, -105, -70, -24, -62,
|
||||
88, 38, 53, -99, -92, 31, 119, 26, 79, 60, -124, 25,
|
||||
-115, -89, -115, -109, 0, 6, 122, -78, 116, 82, 3, 39,
|
||||
-67, 45, -43, 17, -39, 2, 3, 1, 0, 1, -93, 33, 48, 31,
|
||||
48, 29, 6, 3, 85, 29, 14, 4, 22, 4, 20, 63, 109, -42,
|
||||
-109, 25, 22, 7, -37, -22, -41, -38, 58, -56, 2, -68,
|
||||
-38, -22, 65, -28, -60, 48, 13, 6, 9, 42, -122, 72,
|
||||
-122, -9, 13, 1, 1, 11, 5, 0, 3, -126, 1, 1, 0, 94, 17,
|
||||
31, 36, 85, -11, 85, 44, 19, -80, -20, -92, -118, 93,
|
||||
40, 45, 96, 31, -3, -37, -110, -96, 102, 81, 61, -74,
|
||||
-125, -117, -112, 58, -47, 17, 78, -18, 111, -116, 26,
|
||||
-91, 73, 100, 84, -99, 21, 87, 73, -106, 108, -51, -125,
|
||||
-21, 119, -88, -78, 2, 82, -109, -64, -9, -86, -112,
|
||||
-115, 66, -86, 46, 71, 107, -65, 96, -102, 47, 35, -45,
|
||||
-126, 33, 34, 121, -25, -85, -121, -56, -42, 22, -1,
|
||||
-95, -86, 81, 100, -70, 113, 104, -73, 22, -19, 79, -19,
|
||||
52, 62, 42, 76, -112, 94, -34, 42, -57, -75, -90, -58,
|
||||
118, 127, -106, -39, 108, -56, -79, 103, -33, 22, 3, 47,
|
||||
103, -76, -81, 53, -22, -44, -26, -102, 63, -99, 39, 38,
|
||||
-108, 75, 33, 10, 25, -110, -125, -115, 114, -69, 73,
|
||||
-112, 36, 74, 77, -82, -44, 29, -123, -8, -117, 71,
|
||||
-105, 15, -109, 51, 22, 4, 80, 1, 43, 118, 121, -113,
|
||||
-70, 83, -56, 82, -110, 4, -63, 16, -57, 126, -70, 81,
|
||||
73, 61, 2, -61, 24, -14, -10, 4, -21, 90, 24, 66, 41,
|
||||
-57, -60, -113, -18, -54, -1, 103, -75, 32, -64, 67,
|
||||
103, 109, -79, -12, -113, -27, 114, 89, 116, 115, -13,
|
||||
-123, -70, 61, -41, -46, -118, 29, -105, -97, -75, 39,
|
||||
-51, 60, 88, 125, 55, -46, -95, 52, 57, 52, -115, 80,
|
||||
44, 109, 119, -116, -62, -77, -74, -88, 41, 57, -65,
|
||||
-71, -115, -67, 23, 66, -21, 56, 51, -91, 109}};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -31,13 +31,12 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat
|
||||
public static final String KEY_LOCK = "pref_key_lock";
|
||||
public static final String KEY_PANIC_APP = "pref_key_panic_app";
|
||||
public static final String KEY_PURGE = "pref_key_purge";
|
||||
public static final String KEY_UNINSTALL = "pref_key_uninstall";
|
||||
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(PanicPreferencesFragment.class.getName());
|
||||
|
||||
private PackageManager pm;
|
||||
private SwitchPreference lockPref, purgePref, uninstallPref;
|
||||
private SwitchPreference lockPref, purgePref;
|
||||
private ListPreference panicAppPref;
|
||||
|
||||
@Override
|
||||
@@ -49,7 +48,6 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat
|
||||
lockPref = (SwitchPreference) findPreference(KEY_LOCK);
|
||||
panicAppPref = (ListPreference) findPreference(KEY_PANIC_APP);
|
||||
purgePref = (SwitchPreference) findPreference(KEY_PURGE);
|
||||
uninstallPref = (SwitchPreference) findPreference(KEY_UNINSTALL);
|
||||
|
||||
// check for connect/disconnect intents from panic trigger apps
|
||||
if (PanicResponder.checkForDisconnectIntent(getActivity())) {
|
||||
@@ -97,16 +95,11 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat
|
||||
showPanicApp(packageName);
|
||||
|
||||
if (packageName.equals(Panic.PACKAGE_NAME_NONE)) {
|
||||
lockPref.setEnabled(false);
|
||||
purgePref.setChecked(false);
|
||||
purgePref.setEnabled(false);
|
||||
uninstallPref.setChecked(false);
|
||||
uninstallPref.setEnabled(false);
|
||||
getActivity().setResult(Activity.RESULT_CANCELED);
|
||||
} else {
|
||||
lockPref.setEnabled(true);
|
||||
purgePref.setEnabled(true);
|
||||
uninstallPref.setEnabled(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -145,27 +138,15 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
|
||||
String key) {
|
||||
if (key.equals(KEY_PURGE)) {
|
||||
// enable locking if purging gets enabled
|
||||
if (sharedPreferences.getBoolean(KEY_PURGE, false)) {
|
||||
lockPref.setChecked(true);
|
||||
}
|
||||
// disable uninstall if purging gets disabled
|
||||
else {
|
||||
uninstallPref.setChecked(false);
|
||||
}
|
||||
}
|
||||
// enable purging and locking if uninstall gets enabled
|
||||
if (key.equals(KEY_UNINSTALL) &&
|
||||
sharedPreferences.getBoolean(KEY_UNINSTALL, false)) {
|
||||
// enable locking if purging gets enabled
|
||||
if (key.equals(KEY_PURGE) &&
|
||||
sharedPreferences.getBoolean(KEY_PURGE, false)) {
|
||||
lockPref.setChecked(true);
|
||||
purgePref.setChecked(true);
|
||||
}
|
||||
// disable purging and uninstalling if locking gets disabled
|
||||
// disable purging if locking gets disabled
|
||||
if (key.equals(KEY_LOCK) &&
|
||||
!sharedPreferences.getBoolean(KEY_LOCK, true)) {
|
||||
purgePref.setChecked(false);
|
||||
uninstallPref.setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,10 +160,8 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat
|
||||
panicAppPref.setIcon(
|
||||
android.R.drawable.ic_menu_close_clear_cancel);
|
||||
|
||||
// disable panic actions
|
||||
lockPref.setEnabled(false);
|
||||
// disable destructive panic actions
|
||||
purgePref.setEnabled(false);
|
||||
uninstallPref.setEnabled(false);
|
||||
} else {
|
||||
// display connected panic app
|
||||
try {
|
||||
@@ -192,10 +171,8 @@ public class PanicPreferencesFragment extends PreferenceFragmentCompat
|
||||
panicAppPref.setIcon(
|
||||
pm.getApplicationIcon(triggerPackageName));
|
||||
|
||||
// enable panic actions
|
||||
lockPref.setEnabled(true);
|
||||
// enable destructive panic actions
|
||||
purgePref.setEnabled(true);
|
||||
uninstallPref.setEnabled(true);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
// revert back to no app, just to be safe
|
||||
PanicResponder.setTriggerPackageName(getActivity(),
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.briarproject.briar.android.panic;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.preference.PreferenceManager;
|
||||
@@ -11,7 +10,6 @@ import org.briarproject.bramble.api.account.AccountManager;
|
||||
import org.briarproject.bramble.api.system.AndroidExecutor;
|
||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||
import org.briarproject.briar.android.activity.BriarActivity;
|
||||
import org.iilab.IilabEngineeringRSA2048Pin;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -22,10 +20,8 @@ import info.guardianproject.panic.Panic;
|
||||
import info.guardianproject.panic.PanicResponder;
|
||||
import info.guardianproject.trustedintents.TrustedIntents;
|
||||
|
||||
import static android.content.Intent.ACTION_DELETE;
|
||||
import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_LOCK;
|
||||
import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_PURGE;
|
||||
import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_UNINSTALL;
|
||||
|
||||
public class PanicResponderActivity extends BriarActivity {
|
||||
|
||||
@@ -44,8 +40,8 @@ public class PanicResponderActivity extends BriarActivity {
|
||||
TrustedIntents trustedIntents = TrustedIntents.get(this);
|
||||
// Guardian Project Ripple
|
||||
trustedIntents.addTrustedSigner(GuardianProjectRSA4096.class);
|
||||
// Amnesty International's Panic Button, made by iilab.org
|
||||
trustedIntents.addTrustedSigner(IilabEngineeringRSA2048Pin.class);
|
||||
// F-Droid
|
||||
trustedIntents.addTrustedSigner(FDroidSignaturePin.class);
|
||||
|
||||
Intent intent = trustedIntents.getIntentFromTrustedSender(this);
|
||||
if (intent != null) {
|
||||
@@ -60,23 +56,16 @@ public class PanicResponderActivity extends BriarActivity {
|
||||
LOG.info("Panic Trigger came from connected app");
|
||||
|
||||
// Performing panic responses
|
||||
if (sharedPref.getBoolean(KEY_UNINSTALL, false)) {
|
||||
if (sharedPref.getBoolean(KEY_PURGE, false)) {
|
||||
LOG.info("Purging all data...");
|
||||
deleteAllData();
|
||||
|
||||
LOG.info("Uninstalling...");
|
||||
Intent uninstall = new Intent(ACTION_DELETE);
|
||||
uninstall.setData(
|
||||
Uri.parse("package:" + getPackageName()));
|
||||
startActivity(uninstall);
|
||||
} else if (sharedPref.getBoolean(KEY_PURGE, false)) {
|
||||
LOG.info("Purging all data...");
|
||||
deleteAllData();
|
||||
} else if (sharedPref.getBoolean(KEY_LOCK, true)) {
|
||||
LOG.info("Signing out...");
|
||||
signOut(true);
|
||||
}
|
||||
}
|
||||
// non-destructive actions are allowed by non-connected trusted apps
|
||||
if (sharedPref.getBoolean(KEY_LOCK, true)) {
|
||||
LOG.info("Signing out...");
|
||||
signOut(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:autoMirrored="true"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:autoMirrored="true"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:autoMirrored="true"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:autoMirrored="true"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_large"
|
||||
android:layout_marginLeft="@dimen/margin_large"
|
||||
android:layout_marginRight="@dimen/margin_large"
|
||||
android:layout_marginStart="@dimen/margin_large"
|
||||
android:layout_marginTop="@dimen/margin_large"
|
||||
app:hintEnabled="false"
|
||||
@@ -50,6 +52,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_large"
|
||||
android:layout_marginLeft="@dimen/margin_large"
|
||||
android:layout_marginRight="@dimen/margin_large"
|
||||
android:layout_marginStart="@dimen/margin_large"
|
||||
app:hintEnabled="false"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="@dimen/text_size_small"
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/margin_activity_horizontal"
|
||||
android:layout_marginStart="@dimen/margin_activity_horizontal"
|
||||
android:layout_marginTop="@dimen/margin_activity_vertical"
|
||||
android:checked="false"
|
||||
android:text="@string/don_t_ask_again"/>
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
android:layout_width="128dp"
|
||||
android:layout_height="128dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:src="@drawable/alerts_and_states_error"
|
||||
@@ -25,6 +27,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/sorry"
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_large"
|
||||
android:layout_marginLeft="@dimen/margin_large"
|
||||
android:layout_marginRight="@dimen/margin_large"
|
||||
android:layout_marginStart="@dimen/margin_large"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:gravity="center"
|
||||
@@ -66,6 +68,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_large"
|
||||
android:layout_marginLeft="@dimen/margin_large"
|
||||
android:layout_marginRight="@dimen/margin_large"
|
||||
android:layout_marginStart="@dimen/margin_large"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:gravity="center"
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginEnd="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginRight="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginStart="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginTop="@dimen/listitem_vertical_margin"
|
||||
app:layout_constraintEnd_toStartOf="@+id/commentView"
|
||||
@@ -32,10 +34,11 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginEnd="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginRight="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginStart="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginTop="@dimen/listitem_vertical_margin"
|
||||
app:layout_constraintEnd_toStartOf="@+id/commentView"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/rebloggerView"/>
|
||||
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:layout_marginTop="@dimen/listitem_vertical_margin"
|
||||
android:paddingEnd="@dimen/margin_medium"
|
||||
@@ -67,6 +69,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:paddingEnd="@dimen/margin_medium"
|
||||
android:paddingStart="@dimen/margin_medium"
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:layout_weight="1"
|
||||
android:maxLines="2"
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:orientation="vertical">
|
||||
|
||||
@@ -18,6 +13,10 @@
|
||||
style="@style/TextMessage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:background="@drawable/msg_in_top"
|
||||
android:elevation="@dimen/message_bubble_elevation"
|
||||
tools:text="Short message"/>
|
||||
@@ -26,6 +25,11 @@
|
||||
android:id="@+id/layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:background="@drawable/notice_in_bottom"
|
||||
android:elevation="@dimen/message_bubble_elevation">
|
||||
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:orientation="vertical">
|
||||
|
||||
@@ -18,6 +13,10 @@
|
||||
style="@style/TextMessage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_non_tail"
|
||||
android:background="@drawable/msg_out_top"
|
||||
android:elevation="@dimen/message_bubble_elevation"
|
||||
android:textColor="@color/briar_text_primary_inverse"
|
||||
@@ -27,6 +26,11 @@
|
||||
android:id="@+id/layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_non_tail"
|
||||
android:background="@drawable/notice_out_bottom"
|
||||
android:elevation="@dimen/message_bubble_elevation">
|
||||
|
||||
|
||||
@@ -5,11 +5,6 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginTop="@dimen/message_bubble_margin"
|
||||
android:orientation="vertical">
|
||||
|
||||
@@ -18,6 +13,10 @@
|
||||
style="@style/TextMessage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:background="@drawable/msg_in_top"
|
||||
android:elevation="@dimen/message_bubble_elevation"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
@@ -27,6 +26,11 @@
|
||||
android:id="@+id/layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/message_bubble_margin"
|
||||
android:layout_marginEnd="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginLeft="@dimen/message_bubble_margin_tail"
|
||||
android:layout_marginRight="@dimen/message_bubble_margin_non_tail"
|
||||
android:layout_marginStart="@dimen/message_bubble_margin_tail"
|
||||
android:background="@drawable/notice_in_bottom"
|
||||
android:elevation="@dimen/message_bubble_elevation">
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/listitem_horizontal_margin"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
@@ -75,6 +77,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:textColor="?android:attr/textColorTertiary"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="@dimen/text_size_medium"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
@@ -46,6 +47,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:text="@string/forum_invitation_exists"
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/listitem_vertical_margin"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
@@ -51,6 +53,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/listitem_vertical_margin"
|
||||
android:layout_marginEnd="@dimen/margin_small"
|
||||
android:layout_marginLeft="@dimen/margin_small"
|
||||
android:layout_marginRight="@dimen/margin_small"
|
||||
android:layout_marginStart="@dimen/margin_small"
|
||||
android:text="@string/groups_reveal_visible"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
|
||||
@@ -116,6 +116,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginTop="@dimen/listitem_horizontal_margin"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
@@ -41,6 +43,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginEnd="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginLeft="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginRight="@dimen/listitem_horizontal_margin"
|
||||
android:layout_marginStart="@dimen/listitem_horizontal_margin"
|
||||
android:maxLines="2"
|
||||
android:text="@string/forum_invitation_already_sharing"
|
||||
|
||||
@@ -96,6 +96,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_medium"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/btn_reply"
|
||||
@@ -109,6 +111,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:text="@string/btn_reply"
|
||||
android:textSize="@dimen/text_size_tiny"
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
android:layout_gravity="bottom|start"
|
||||
android:layout_marginBottom="@dimen/margin_medium"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:contentDescription="@string/app_name"
|
||||
android:src="@drawable/navigation_drawer_header"/>
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_large"
|
||||
android:layout_marginLeft="@dimen/margin_large"
|
||||
android:layout_marginRight="@dimen/margin_large"
|
||||
android:layout_marginStart="@dimen/margin_large"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:textSize="@dimen/text_size_medium"
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginEnd="@dimen/listitem_picture_frame_offset_horizontal"
|
||||
android:layout_marginRight="@dimen/listitem_picture_frame_offset_horizontal"
|
||||
android:layout_marginTop="@dimen/listitem_picture_frame_offset_vertical"
|
||||
android:maxLength="1"
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/margin_medium"
|
||||
android:layout_marginLeft="@dimen/margin_medium"
|
||||
android:layout_marginRight="@dimen/margin_medium"
|
||||
android:layout_marginStart="@dimen/margin_medium"
|
||||
android:layout_marginTop="@dimen/margin_medium"
|
||||
android:elevation="@dimen/cardview_default_elevation"
|
||||
|
||||
@@ -149,7 +149,6 @@
|
||||
<string name="contact_added_toast">تم إضافة جهة إتصال: %s</string>
|
||||
<string name="contact_already_exists">جهة الإتصال %s بالفعل موجودة</string>
|
||||
<string name="qr_code_invalid">رمز QR غير صالح</string>
|
||||
<string name="qr_code_unsupported">رمز QR الذي تحاول مسحه يعود لإصدار قديم من %s لم يعد مدعومًا.\n\nمن فضلك تأكد أن كليكما يستخدم آخر إصدار ثم حاول مجددًا.</string>
|
||||
<string name="camera_error">خطأ بالكاميرا</string>
|
||||
<string name="connecting_to_device">يتم الإتصال بالجهاز\u2026</string>
|
||||
<string name="authenticating_with_device">يتم التوثيق مع الجهاز\u2026</string>
|
||||
@@ -379,10 +378,8 @@
|
||||
<string name="tor_mobile_data_title">إستخدم بيانات الجوال</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">الأمان</string>
|
||||
<string name="pref_lock_title">قفل الشاشة</string>
|
||||
<string name="pref_lock_summary">استخدم قفل شاشة الجهاز لحماية Briar (براير) في حال تسجيل الدخول</string>
|
||||
<string name="pref_lock_disabled_summary">لاستخدام هذه الميزة، قم بإعداد قفل شاشة لجهازك</string>
|
||||
<string name="pref_lock_timeout_title">زمن قفل الشاشة عند عدم النشاط</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">حينما لا تستخدم Briar (براير)، أقفله تلقائيا بعد %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -434,8 +431,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">أظهر التنبيهات للتدوينات</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">اضبط التنبيهات للتدوينات</string>
|
||||
<string name="notify_vibration_setting">إهتزاز</string>
|
||||
<string name="notify_lock_screen_setting_title">قفل الشاشة</string>
|
||||
<string name="notify_lock_screen_setting_summary">أظهر التنبيهات على قفل الشاشة</string>
|
||||
<string name="notify_sound_setting">الصوت</string>
|
||||
<string name="notify_sound_setting_default">النغمة الافتراضية</string>
|
||||
<string name="notify_sound_setting_disabled">لا شيء</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">S\'ha afegit el contacte %s</string>
|
||||
<string name="contact_already_exists">El contacte %s ja existia</string>
|
||||
<string name="qr_code_invalid">El codi QR és invàlid</string>
|
||||
<string name="qr_code_unsupported">El codi QR que intenteu escanejar pertany a una versió antiga de %s que ja no és compatible.\n\nAssegureu-vos que tothom està executant la darrera versió i torneu a provar-ho.</string>
|
||||
<string name="camera_error">Error de la càmera</string>
|
||||
<string name="connecting_to_device">Connectant-se al dispositiu\u2026</string>
|
||||
<string name="authenticating_with_device">Autenticant-se amb el dispositiu\u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">Usa dades mòbils</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Seguretat</string>
|
||||
<string name="pref_lock_title">Bloqueig de pantalla</string>
|
||||
<string name="pref_lock_summary">Usa el bloqueig de pantalla del dispositiu per protegir Briar mentre inicieu la sessió</string>
|
||||
<string name="pref_lock_disabled_summary">Per utilitzar aquesta funció, configureu el bloqueig de pantalla en el vostre dispositiu</string>
|
||||
<string name="pref_lock_timeout_title">Temps d\'inactivitat del bloqueig de pantalla</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Briar es bloquejarà automàticament després de %s de no usar-se.</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Mostra avisos pels apunts als blogs</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configura els avisos pels apunts als blogs</string>
|
||||
<string name="notify_vibration_setting">Vibra</string>
|
||||
<string name="notify_lock_screen_setting_title">Bloca la pantalla</string>
|
||||
<string name="notify_lock_screen_setting_summary">Mostra les notificacions a la pantalla de bloqueig</string>
|
||||
<string name="notify_sound_setting">So</string>
|
||||
<string name="notify_sound_setting_default">So d\'avís predeterminat</string>
|
||||
<string name="notify_sound_setting_disabled">Cap</string>
|
||||
|
||||
@@ -132,7 +132,6 @@
|
||||
<string name="contact_added_toast">Kontakt byl přidán: %s</string>
|
||||
<string name="contact_already_exists">Kontakt %s již existuje</string>
|
||||
<string name="qr_code_invalid">QR kód je neplatný</string>
|
||||
<string name="qr_code_unsupported">QR kód, který se pokoušíte skenovat, patří k starší verzi %s, která již není podporována.\n\nJe potřebné, aby oba kontakty používali nejnovější verzi a následně to zkuste znovu.</string>
|
||||
<string name="camera_error">Vyskytla se chyba fotoaparátu</string>
|
||||
<string name="connecting_to_device">Připojování k zařízení\u2026</string>
|
||||
<string name="authenticating_with_device">Ověřování se zařízením\u2026</string>
|
||||
@@ -366,8 +365,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Zobrazit upozornění pro příspěvky v blogu</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Nastavení upozornění pro příspěvky blogu</string>
|
||||
<string name="notify_vibration_setting">Vibrovat</string>
|
||||
<string name="notify_lock_screen_setting_title">Zamčená obrazovka</string>
|
||||
<string name="notify_lock_screen_setting_summary">Zobrazit oznámení na zamčené obrazovce</string>
|
||||
<string name="notify_sound_setting">Zvuk</string>
|
||||
<string name="notify_sound_setting_default">Výchozí vyzvánění</string>
|
||||
<string name="notify_sound_setting_disabled">Žádný</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Kontakt hinzugefügt: %s</string>
|
||||
<string name="contact_already_exists">Kontakt %s existiert bereits</string>
|
||||
<string name="qr_code_invalid">Der QR-Code ist ungültig</string>
|
||||
<string name="qr_code_unsupported">Der QR-Code, den du zu scannen versuchst, gehört zu einer alten Version von %s, welche nicht mehr unterstützt wird.\n\nBitte versichert euch, dass bei euch beiden die neueste Version läuft und versucht es dann erneut.</string>
|
||||
<string name="camera_error">Kamerafehler</string>
|
||||
<string name="connecting_to_device">Verbinde mit Gerät\u2026</string>
|
||||
<string name="authenticating_with_device">Authentifiziere Gerät\u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">Mobile Daten benutzen</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Sicherheit</string>
|
||||
<string name="pref_lock_title">Bildschirmsperre</string>
|
||||
<string name="pref_lock_summary">Systemsperrbildschirm benutzen um Briar zu schützen, während angemeldet</string>
|
||||
<string name="pref_lock_disabled_summary">Um dieses Feature zu benutzen aktiviere den Systemsperrbildschirm</string>
|
||||
<string name="pref_lock_timeout_title">Inaktivitätstimeout Systemsperrbildschirm</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Briar automatisch nach %s sperren, wenn unbenutzt.</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Benachrichtigungen für Blogbeiträge anzeigen</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Benachrichtigungen für Blogbeiträge konfigurieren</string>
|
||||
<string name="notify_vibration_setting">Vibration</string>
|
||||
<string name="notify_lock_screen_setting_title">Sperrbildschirm</string>
|
||||
<string name="notify_lock_screen_setting_summary">Benachrichtigungen auf dem Sperrbildschirm anzeigen</string>
|
||||
<string name="notify_sound_setting">Ton</string>
|
||||
<string name="notify_sound_setting_default">Standardklingelton</string>
|
||||
<string name="notify_sound_setting_disabled">Keine</string>
|
||||
|
||||
@@ -129,7 +129,8 @@
|
||||
<string name="contact_added_toast">Contacto añadido: %s</string>
|
||||
<string name="contact_already_exists">El contacto %s ya existe</string>
|
||||
<string name="qr_code_invalid">El código QR no es válido</string>
|
||||
<string name="qr_code_unsupported">El código QR que intentas escanear pertenece a una versión anterior de %s que ya no es compatible.\n\nAsegúrate de que ambos estén ejecutando la última versión y luego inténtalo de nuevo.</string>
|
||||
<string name="qr_code_too_old">El código QR que has escaneado proviene de una versión anterior de %s.\n\nPor favor solicita a tu contacto que actualice a la última versión y luego intenta nuevamente.</string>
|
||||
<string name="qr_code_too_new">El código QR que has escaneado proviene de una versión posterior de %s.\n\nPor favor actualiza a la última versión y luego intenta nuevamente.</string>
|
||||
<string name="camera_error">Error de cámara</string>
|
||||
<string name="connecting_to_device">Conectando al dispositivo\u2026</string>
|
||||
<string name="authenticating_with_device">Autentificándose con el dispositivo\u2026</string>
|
||||
@@ -339,10 +340,10 @@
|
||||
<string name="tor_mobile_data_title">Usar datos móviles</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Seguridad</string>
|
||||
<string name="pref_lock_title">Bloqueo de pantalla</string>
|
||||
<string name="pref_lock_title">Bloqueo de apli</string>
|
||||
<string name="pref_lock_summary">Usar el bloqueo de pantalla del dispositivo para proteger Briar mientras estés con sesión iniciada.</string>
|
||||
<string name="pref_lock_disabled_summary">Para usar esta característica, configurar un bloqueo de pantalla para tu dispositivo</string>
|
||||
<string name="pref_lock_timeout_title">Expiración por inactividad. Pantalla bloqueada</string>
|
||||
<string name="pref_lock_timeout_title">Tiempo alcanzado para bloqueo de apli por inactividad</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Cuando no se está usando Briar, bloquearlo automáticamente luego de %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -371,6 +372,7 @@
|
||||
<string name="panic_app_setting_none">Ninguna</string>
|
||||
<string name="dialog_title_connect_panic_app">Confirmar aplicación de pánico</string>
|
||||
<string name="dialog_message_connect_panic_app">¿Seguro que quieres permitir que %1$s desencadene acciones destructivas de botón de pánico?</string>
|
||||
<string name="panic_setting_destructive_action">Acciones destructivas</string>
|
||||
<string name="panic_setting_signout_title">Cerrar sesión</string>
|
||||
<string name="panic_setting_signout_summary">Cerrar la sesión de Briar si se pulsa un botón de pánico</string>
|
||||
<string name="purge_setting_title">Eliminar cuenta</string>
|
||||
@@ -394,8 +396,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Mostrar notificaciones para artículos de blog</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurar notificaciones para artículos de blog</string>
|
||||
<string name="notify_vibration_setting">Vibrar</string>
|
||||
<string name="notify_lock_screen_setting_title">Bloqueo de Pantalla</string>
|
||||
<string name="notify_lock_screen_setting_summary">Notificaciones en la pantalla de bloqueo</string>
|
||||
<string name="notify_sound_setting">Sonido</string>
|
||||
<string name="notify_sound_setting_default">Tono de notificación predeterminado</string>
|
||||
<string name="notify_sound_setting_disabled">Ninguno</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Kontaktua gehitu da: %s</string>
|
||||
<string name="contact_already_exists">%s kontaktua badago aurretik ere</string>
|
||||
<string name="qr_code_invalid">QR kodea baliogabea da</string>
|
||||
<string name="qr_code_unsupported">Eskaneatzen saiatu zaren QR kodea %s programaren bertsio zahar bati dagokio eta ez da onartzen jada.\n\nZiurtatu biek azken bertsioa erabiltzen duzuela eta saiatu berriro.</string>
|
||||
<string name="camera_error">Kameraren errorea</string>
|
||||
<string name="connecting_to_device">Gailura konektatzen\u2026</string>
|
||||
<string name="authenticating_with_device">Gailuarekin autentifikatzen\u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">Erabili datu mugikorrak</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Segurtasuna</string>
|
||||
<string name="pref_lock_title">Pantaila-blokeoa</string>
|
||||
<string name="pref_lock_summary">Erabili gailuaren pantaila-blokeoa Briar babesteko saioa irekita dagoen bitartean</string>
|
||||
<string name="pref_lock_disabled_summary">Eginbide hau erabiltzeko, ezarri zure gailuarentzako pantaila-blokeo bat</string>
|
||||
<string name="pref_lock_timeout_title">Pantaila-blokeatzeko jarduera ezaren denbora-muga</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Briar ez erabiltzean, hura automatikoki blokeatu %s eta gero</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Erakutsi blogetako sarreren alertak</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Konfiguratu blogetako sarreren alertak</string>
|
||||
<string name="notify_vibration_setting">Bibratu</string>
|
||||
<string name="notify_lock_screen_setting_title">Blokeo-pantaila</string>
|
||||
<string name="notify_lock_screen_setting_summary">Erakutsi jakinarazpenak blokeo-pantailan</string>
|
||||
<string name="notify_sound_setting">Soinua</string>
|
||||
<string name="notify_sound_setting_default">Lehenetsitako dei-doinua</string>
|
||||
<string name="notify_sound_setting_disabled">Bat ere ez</string>
|
||||
|
||||
@@ -136,9 +136,6 @@
|
||||
<string name="contact_added_toast">مخاطب اضافه شد: %s</string>
|
||||
<string name="contact_already_exists">مخاطب %s از قبل وجود دارد</string>
|
||||
<string name="qr_code_invalid">کد QR نامعتبر می باشد</string>
|
||||
<string name="qr_code_unsupported">کد QR که شما سعی دارید اسکن کنید متعلق به یک نسخه قدیمی از %s میباشد که دیگر پشتیبانی نمی شود.
|
||||
|
||||
لطفا مطمئن شوید که هردوی شما از آخرین نسخه استفاده میکنید و دوباره امتحان کنید.</string>
|
||||
<string name="camera_error">خطای دوربین</string>
|
||||
<string name="connecting_to_device">اتصال به دستگاهu2026\</string>
|
||||
<string name="authenticating_with_device">تصدیق سازی با دستگاه u2026\</string>
|
||||
@@ -370,10 +367,8 @@
|
||||
<string name="tor_mobile_data_title">استفاده از داده موبایل</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">امنیت</string>
|
||||
<string name="pref_lock_title">قفل صفحه</string>
|
||||
<string name="pref_lock_summary">استفاده از قفل صفحه دستگاه به منظور محافظت از Briar (برایر) در هنگام استفاده از آن</string>
|
||||
<string name="pref_lock_disabled_summary">برای استفاده از این ویژگی، قفل صفحه را برای دستگاه خود برپا کنید</string>
|
||||
<string name="pref_lock_timeout_title">اتمام وقت عدم فعالیت قفل صفحه</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">زمانی که از Briar (برایر) استفاده نمی شود، به صورت خودکار بعد از %s آن را قفل کن</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -425,8 +420,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">نمایش هشدار برای پست های بلاگ</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">تنظیم هشدار برای پست های بلاگ</string>
|
||||
<string name="notify_vibration_setting">لرزش</string>
|
||||
<string name="notify_lock_screen_setting_title">قفل صفحه</string>
|
||||
<string name="notify_lock_screen_setting_summary">نمایش نوتیفیکشن روی صفحه قفل</string>
|
||||
<string name="notify_sound_setting">صدا</string>
|
||||
<string name="notify_sound_setting_default">رینگتون پیش فرض</string>
|
||||
<string name="notify_sound_setting_disabled">هیچکدام</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Yhteystieto lisätty: %s</string>
|
||||
<string name="contact_already_exists">Yhteystieto %s on jo olemassa</string>
|
||||
<string name="qr_code_invalid">QR koodi on virheellinen</string>
|
||||
<string name="qr_code_unsupported">Skannaamasi QR-koodi kuuluu %s:in vanhaan versioon, jonka tuki on loppunut.\n\nVarmista että kumpikin teistä käyttää uusinta versiota ja yritä uudelleen.</string>
|
||||
<string name="camera_error">Kameravirhe</string>
|
||||
<string name="connecting_to_device">Yhdistetään laitteeseen\u2026</string>
|
||||
<string name="authenticating_with_device">Tunnistaudutaan laitteen kanssa\u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">Käytä mobiilitiedonsiirtoa</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Turvallisuus</string>
|
||||
<string name="pref_lock_title">Näytön lukitus</string>
|
||||
<string name="pref_lock_summary">Käytä laitteen näytön lukitusta suojataksesi Briar kun olet kirjautunut sisään</string>
|
||||
<string name="pref_lock_disabled_summary">Käyttääksesi tätä ominaisuutta, ota käyttöön laitteesi näytön lukitus</string>
|
||||
<string name="pref_lock_timeout_title">Näytön lukituksen inaktiviteetti aikakatkaisu</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Kun Briar ei ole käytössä, lukitse se automaattisesti %s jälkeen</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Näytä ilmoitukset blogikirjoituksista</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Aseta ilmoitukset blogikirjoituksille</string>
|
||||
<string name="notify_vibration_setting">Värinä</string>
|
||||
<string name="notify_lock_screen_setting_title">Lukitusnäyttö</string>
|
||||
<string name="notify_lock_screen_setting_summary">Näytä ilmoitukset lukitusnäytöllä</string>
|
||||
<string name="notify_sound_setting">Ääni</string>
|
||||
<string name="notify_sound_setting_default">Oletussoittoääni</string>
|
||||
<string name="notify_sound_setting_disabled">Ei mikään</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Contact ajouté : %s</string>
|
||||
<string name="contact_already_exists">Le contact %s existe déjà</string>
|
||||
<string name="qr_code_invalid">Le code QR est invalide</string>
|
||||
<string name="qr_code_unsupported">Le code QR que vous tentez de lire appartient à une ancienne version de %s qui n’est plus prise en charge.\n\nVeuillez vous assurer d’utiliser tous les deux la dernière version et ressayer.</string>
|
||||
<string name="camera_error">Erreur de la caméra</string>
|
||||
<string name="connecting_to_device">Connexion à l’appareil\u2026</string>
|
||||
<string name="authenticating_with_device">Autentification avec l’appareil\u2026</string>
|
||||
@@ -339,10 +338,10 @@
|
||||
<string name="tor_mobile_data_title">Utiliser les données cellulaires</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Sécurité</string>
|
||||
<string name="pref_lock_title">Verrouillage de l’écran</string>
|
||||
<string name="pref_lock_title">Verrou de l’appli</string>
|
||||
<string name="pref_lock_summary">Utiliser le verrouillage de l’écran de l’appareil pour protéger Briar une fois connecté</string>
|
||||
<string name="pref_lock_disabled_summary">Pour utiliser cette fonction, configurez le verrouillage de l’écran sur votre appareil</string>
|
||||
<string name="pref_lock_timeout_title">Délai d’inactivité avant verrouillage de l’écran</string>
|
||||
<string name="pref_lock_timeout_title">Délai d’inactivité avant verrouillage de l’appli</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Si Briar n’est pas utilisée, verrouiller automatiquement après %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +393,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Afficher des alertes pour les billets de blogue</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurer les alertes pour les billets de forum</string>
|
||||
<string name="notify_vibration_setting">Vibrer</string>
|
||||
<string name="notify_lock_screen_setting_title">Écran de verrouillage</string>
|
||||
<string name="notify_lock_screen_setting_summary">Afficher les notifications sur l’écran de verrouillage</string>
|
||||
<string name="notify_sound_setting">Son</string>
|
||||
<string name="notify_sound_setting_default">Sonnerie par défaut</string>
|
||||
<string name="notify_sound_setting_disabled">Aucun</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Contacto engadido: %s</string>
|
||||
<string name="contact_already_exists">O contacto %s xa existe</string>
|
||||
<string name="qr_code_invalid">O código QR non é válido</string>
|
||||
<string name="qr_code_unsupported">O código QR que intenta escanear pertence a unha versión antiga de %s que xa non ten mantemento.\n\nPor favor, asegúrese que ambas utilizan a última versión e inténteno de novo.</string>
|
||||
<string name="camera_error">Fallo na cámara</string>
|
||||
<string name="connecting_to_device">Conectando co dispositivo\u2026</string>
|
||||
<string name="authenticating_with_device">Autenticándose co dispositivo\u2026</string>
|
||||
@@ -339,10 +338,10 @@
|
||||
<string name="tor_mobile_data_title">Utilizar datos móbiles</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Seguridade</string>
|
||||
<string name="pref_lock_title">Bloquear pantalla</string>
|
||||
<string name="pref_lock_title">Bloquear app</string>
|
||||
<string name="pref_lock_summary">Utilizar o bloqueo de pantalla do dispositiov para protexer Briar mentras está conectada</string>
|
||||
<string name="pref_lock_disabled_summary">Para utilizar esta función, axuste o bloqueo de pantalla do dispositivo</string>
|
||||
<string name="pref_lock_timeout_title">Tempo de inactividade para o bloqueo da pantalla</string>
|
||||
<string name="pref_lock_timeout_title">Tempo de espera en inactividade para o bloqueo</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Cando non utilice Briar, bloquear automáticamente tras %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +393,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Amosar alertas para entradas no blog</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurar alertas para entradas no blog</string>
|
||||
<string name="notify_vibration_setting">Vibrar</string>
|
||||
<string name="notify_lock_screen_setting_title">Bloquear pantalla</string>
|
||||
<string name="notify_lock_screen_setting_summary">Amosar notificacións na pantalla bloqueada</string>
|
||||
<string name="notify_sound_setting">Son</string>
|
||||
<string name="notify_sound_setting_default">Ton por omisión</string>
|
||||
<string name="notify_sound_setting_disabled">Ningún</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">संपर्क जोड़ा गया:%s</string>
|
||||
<string name="contact_already_exists">संपर्क%s पहले से मौजूद है</string>
|
||||
<string name="qr_code_invalid">QR कोड अमान्य है</string>
|
||||
<string name="qr_code_unsupported">क्यूआर कोड जिसे आप स्कैन करने का प्रयास कर रहे हैं वह पुराने संस्करण से संबंधित है %sजिसका अब समर्थित नहीं है। \ N \ n कृपया सुनिश्चित करें कि आप दोनों नवीनतम संस्करण चला रहे हैं और फिर पुन: प्रयास करें।</string>
|
||||
<string name="camera_error">कैमरा त्रुटि</string>
|
||||
<string name="connecting_to_device">उपकरण \ u2026 से कनेक्ट हो रहा है</string>
|
||||
<string name="authenticating_with_device">डिवाइस के साथ प्रमाणीकरण \ u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">मोबाइल डेटा का प्रयोग करें</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">सुरक्षा</string>
|
||||
<string name="pref_lock_title">स्क्रीन लॉक</string>
|
||||
<string name="pref_lock_summary">साइन इन करते समय Briar की सुरक्षा के लिए डिवाइस के स्क्रीन लॉक का उपयोग करें</string>
|
||||
<string name="pref_lock_disabled_summary">इस सुविधा का उपयोग करने के लिए, अपने डिवाइस के लिए एक स्क्रीन लॉक सेट करें</string>
|
||||
<string name="pref_lock_timeout_title">स्क्रीन लॉक निष्क्रियता टाइमआउट</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Briar का उपयोग नहीं करते समय, इसे स्वचालित रूप से बाद में लॉक करें %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">ब्लॉग पोस्ट के लिए अलर्ट्स दिखाएं</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">ब्लॉग पोस्ट के लिए अलर्ट कॉन्फ़िगर करें</string>
|
||||
<string name="notify_vibration_setting">कांपना</string>
|
||||
<string name="notify_lock_screen_setting_title">लॉक स्क्रीन</string>
|
||||
<string name="notify_lock_screen_setting_summary">लॉक स्क्रीन पर सूचनाएं दिखाएं</string>
|
||||
<string name="notify_sound_setting">ध्वनि</string>
|
||||
<string name="notify_sound_setting_default">बकाया घंटी</string>
|
||||
<string name="notify_sound_setting_disabled">कोई नहीं</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Kapcsolat hozzáadva: %s</string>
|
||||
<string name="contact_already_exists">%s kapcsolat már létezik</string>
|
||||
<string name="qr_code_invalid">A QR kód érvénytelen</string>
|
||||
<string name="qr_code_unsupported">A QR kód amit le szeretne olvasni egy korábbi %s verzióhoz tartozik, ami már nem támogatott többé.\n\nKérjük biztosítsák, hogy mindketten a legfrissebb verziót használják és próbálják újra.</string>
|
||||
<string name="camera_error">Kamera hiba</string>
|
||||
<string name="connecting_to_device">Csatlakozás az eszközhöz\u2026</string>
|
||||
<string name="authenticating_with_device">Azonosítás az eszközzel\u2026</string>
|
||||
@@ -341,10 +340,8 @@
|
||||
<string name="tor_mobile_data_title">Mobil adat használata</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Biztonság</string>
|
||||
<string name="pref_lock_title">Képernyőzár</string>
|
||||
<string name="pref_lock_summary">Az eszköz képernyő zárának használata a Briar védelmére, ha be van jelentkezve</string>
|
||||
<string name="pref_lock_disabled_summary">Ahhoz, hogy használni tudja ezt az opciót, állítson be zárképernyőt az eszközén</string>
|
||||
<string name="pref_lock_timeout_title">Képernyőzár inaktivítási idő </string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Ha nem használja a Briar-t, automatikusan zárol %s után</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -397,8 +394,6 @@ Vigyázat: Ez végleg törli az identitásait, kapcsolatait és üzeneteit</stri
|
||||
<string name="notify_blog_posts_setting_summary">Értesítés megjelenítése blog bejegyzésekről</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Értesítés beállítása blog bejegyésekhez</string>
|
||||
<string name="notify_vibration_setting">Rezgés</string>
|
||||
<string name="notify_lock_screen_setting_title">Zárolási képernyő</string>
|
||||
<string name="notify_lock_screen_setting_summary">Értesítések megjelenítése a zárolási képernyőn</string>
|
||||
<string name="notify_sound_setting">Hang</string>
|
||||
<string name="notify_sound_setting_default">Alapértelmezett csengőhang</string>
|
||||
<string name="notify_sound_setting_disabled">Egyik sem</string>
|
||||
|
||||
@@ -129,7 +129,8 @@
|
||||
<string name="contact_added_toast">Contatto aggiunto: %s</string>
|
||||
<string name="contact_already_exists">Il contatto %s esiste già</string>
|
||||
<string name="qr_code_invalid">Il codice QR non è valido</string>
|
||||
<string name="qr_code_unsupported">Il codice QR che state tentando di scansionare appartiene ad una vecchia versione di %s che non è più supportata.\n\nAssicuratevi entrambi di utilizzare la versione più recente e poi riprovare.</string>
|
||||
<string name="qr_code_too_old">Il codice QR che hai scansionato proviene da una vecchia versione di %s.\n\nChiedi al tuo contatto di aggiornare all\'ultima versione e poi riprova.</string>
|
||||
<string name="qr_code_too_new">Il codice QR che hai scansionato proviene da una versione più recente di %s.\n\nAggiorna all\'ultima versione e poi riprova.</string>
|
||||
<string name="camera_error">Errore fotocamera</string>
|
||||
<string name="connecting_to_device">Connessione al dispositivo\u2026</string>
|
||||
<string name="authenticating_with_device">Autenticazione con il dispositivo\u2026</string>
|
||||
@@ -339,10 +340,10 @@
|
||||
<string name="tor_mobile_data_title">Usa dati mobili</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Sicurezza</string>
|
||||
<string name="pref_lock_title">Blocco schermo</string>
|
||||
<string name="pref_lock_title">Blocco dell\'app</string>
|
||||
<string name="pref_lock_summary">Usa il blocco schermo del dispositivo per proteggere Briar mentre sei connesso</string>
|
||||
<string name="pref_lock_disabled_summary">Per usare questa funzione, imposta un blocco schermo per il dispositivo</string>
|
||||
<string name="pref_lock_timeout_title">Blocco schermo per inattività</string>
|
||||
<string name="pref_lock_timeout_title">Tempo inattività per blocco app</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Quando non usi Briar, bloccalo automaticamente dopo %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -371,6 +372,7 @@
|
||||
<string name="panic_app_setting_none">Nessuno</string>
|
||||
<string name="dialog_title_connect_panic_app">Conferma App Panico</string>
|
||||
<string name="dialog_message_connect_panic_app">Sei sicuro di voler consentire %1$s di attivare le azioni distruttive del pulsante panico?</string>
|
||||
<string name="panic_setting_destructive_action">Azioni distruttive</string>
|
||||
<string name="panic_setting_signout_title">Esci</string>
|
||||
<string name="panic_setting_signout_summary">Uscire da Briar se viene premuto un pulsante di panico</string>
|
||||
<string name="purge_setting_title">Elimina Account</string>
|
||||
@@ -394,8 +396,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Mostra avvisi per post di blog</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurare avvisi per post di blog</string>
|
||||
<string name="notify_vibration_setting">Vibrazione</string>
|
||||
<string name="notify_lock_screen_setting_title">Blocca schermo</string>
|
||||
<string name="notify_lock_screen_setting_summary">Mostra notifiche sul blocca schermo</string>
|
||||
<string name="notify_sound_setting">Suono</string>
|
||||
<string name="notify_sound_setting_default">Suoneria di default</string>
|
||||
<string name="notify_sound_setting_disabled">Nessuno</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Contact toegevoegd: %s</string>
|
||||
<string name="contact_already_exists">Contact %s bestaat al</string>
|
||||
<string name="qr_code_invalid">De QR-code is ongeldig</string>
|
||||
<string name="qr_code_unsupported">De QR-code die je probeert te scannen is van een oude versie van %s die niet meer wordt ondersteund.\n\nControleer alsjeblieft dat jullie beiden de laatste versie gebruiken en probeer het nog een keer.</string>
|
||||
<string name="camera_error">Camerafout</string>
|
||||
<string name="connecting_to_device">Aan het verbinden met apparaat\u2026</string>
|
||||
<string name="authenticating_with_device">Aan het authenticeren met apparaat\u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">Gebruik mobiele data</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Beveiliging</string>
|
||||
<string name="pref_lock_title">Schermvergrendeling</string>
|
||||
<string name="pref_lock_summary">Gebruik de schermvergrendeling van het apparaat om Briar te beschermen terwijl je bent ingelogd</string>
|
||||
<string name="pref_lock_disabled_summary">Stel een schermvergrendeling in op je apparaat om deze feature te gebruiken</string>
|
||||
<string name="pref_lock_timeout_title">Time-out van schermvergrendeling bij inactiviteit</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Als Briar niet wordt gebruikt, vergrendel automatisch na %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Toon meldingen voor blogposts</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configureer meldingen voor blogposts</string>
|
||||
<string name="notify_vibration_setting">Tril</string>
|
||||
<string name="notify_lock_screen_setting_title">Schermvergrendeling</string>
|
||||
<string name="notify_lock_screen_setting_summary">Toon notificaties over de schermvergrendeling</string>
|
||||
<string name="notify_sound_setting">Geluid</string>
|
||||
<string name="notify_sound_setting_default">Standaard meldingsgeluid</string>
|
||||
<string name="notify_sound_setting_disabled">Geen</string>
|
||||
|
||||
@@ -131,7 +131,6 @@ Volètz suprimir vòstre compte e ne crear un nòu ?\n
|
||||
<string name="contact_added_toast">Contacte apondut : %s</string>
|
||||
<string name="contact_already_exists">Lo contacte %s existís ja</string>
|
||||
<string name="qr_code_invalid">Lo QR còdi es invalid</string>
|
||||
<string name="qr_code_unsupported">Lo còdi QR qu’ensajatz de numerizar ven d’una anciana version de %s qu’es pas mai desvolopada.\n\nMercés de vos assegurar que los dos avètz la darrièra version e de tornar ensajar.</string>
|
||||
<string name="camera_error">Error de camèra</string>
|
||||
<string name="connecting_to_device">Connexion a l’aparelh\u2026</string>
|
||||
<string name="authenticating_with_device">Autentificacion amb l’aparelh\u2026</string>
|
||||
@@ -344,10 +343,8 @@ contactes qu’avètz partejat aqueste flux quitaràn benlèu de recebre las mes
|
||||
<string name="tor_mobile_data_title">Utilizar la connexion del mobil</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Seguretat</string>
|
||||
<string name="pref_lock_title">Verrolhatge de l’ecran</string>
|
||||
<string name="pref_lock_summary">Utilizar l’ecran de verrolhatge per protegir Briar quand es connectat</string>
|
||||
<string name="pref_lock_disabled_summary">Per utilizar aquesta foncion, configuratz un ecran de verrolatge per l’aparelh</string>
|
||||
<string name="pref_lock_timeout_title">Relambi pel verrolhatge de l’ecran aprèp inactivitat</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Sens utilizar Briar, lo verrolhar aprèp %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -399,8 +396,6 @@ contactes qu’avètz partejat aqueste flux quitaràn benlèu de recebre las mes
|
||||
<string name="notify_blog_posts_setting_summary">Notificar los articles de blòg</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurar las alèrtas d’articles de blòg</string>
|
||||
<string name="notify_vibration_setting">Vibracion</string>
|
||||
<string name="notify_lock_screen_setting_title">Verrolhar l’ecran</string>
|
||||
<string name="notify_lock_screen_setting_summary">Mostrar las notificacions sus l’ecran verrolhat</string>
|
||||
<string name="notify_sound_setting">Sonariá</string>
|
||||
<string name="notify_sound_setting_default">Sonariá per defaut</string>
|
||||
<string name="notify_sound_setting_disabled">Cap</string>
|
||||
|
||||
@@ -139,7 +139,6 @@
|
||||
<string name="contact_added_toast">Kontakt dodany: %s</string>
|
||||
<string name="contact_already_exists">Kontakt %s już istnieje</string>
|
||||
<string name="qr_code_invalid">Kod QR jest nie prawidłowy</string>
|
||||
<string name="qr_code_unsupported">Kod QR który chcecsz zeskanować jest z wersji %s która nie jest już wspierana.\n\nProszę upewnić się czy oboje używacie najnowszej wersji i spróbować ponownie.</string>
|
||||
<string name="camera_error">Błąd aparatu</string>
|
||||
<string name="connecting_to_device">Łączenie z urządzeniem\u2026</string>
|
||||
<string name="authenticating_with_device">Autoryzowanie z urządzeniem\u2026</string>
|
||||
@@ -359,10 +358,8 @@
|
||||
<string name="tor_mobile_data_title">Używaj danych komórkowych</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Bezpieczeństwo</string>
|
||||
<string name="pref_lock_title">Blokada ekranu</string>
|
||||
<string name="pref_lock_summary">Użyj blokady ekranu urządzenia by chronić Briar gdy zalogowany</string>
|
||||
<string name="pref_lock_disabled_summary">Aby użyć tej funkcji skonfiguruj blokadę ekranu na swoim urządzeniu</string>
|
||||
<string name="pref_lock_timeout_title">Blokada ekranu gdy wykryto aktywności</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Gdy nie używam Briar, automatycznie zablokuj po %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -414,8 +411,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Pokazuj powiadomienia dla wpisów na blogach</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Skonfiguruj alerty dla wpisów na blogach</string>
|
||||
<string name="notify_vibration_setting">Wibruj</string>
|
||||
<string name="notify_lock_screen_setting_title">Ekran blokady</string>
|
||||
<string name="notify_lock_screen_setting_summary">Pokaż powiadomienia na zablokowanym ekranie</string>
|
||||
<string name="notify_sound_setting">Dźwięk</string>
|
||||
<string name="notify_sound_setting_default">Domyślny dzwonek</string>
|
||||
<string name="notify_sound_setting_disabled">Brak</string>
|
||||
|
||||
@@ -129,7 +129,6 @@
|
||||
<string name="contact_added_toast">Contato adicionado: %s</string>
|
||||
<string name="contact_already_exists">Contato %s já existe</string>
|
||||
<string name="qr_code_invalid">O código QR é inválido</string>
|
||||
<string name="qr_code_unsupported">O código QR que você está tentando escanear é de uma versão antiga do %s, que não é mais suportada.\n\nPor favor, verifique que você e a outra pessoa está usando a versão mais recente e tentem de novo.</string>
|
||||
<string name="camera_error">Erro da câmera</string>
|
||||
<string name="connecting_to_device">Conectando a device\u2026</string>
|
||||
<string name="authenticating_with_device">Autenticando com o dispositivo\u2026</string>
|
||||
@@ -339,10 +338,8 @@
|
||||
<string name="tor_mobile_data_title">Usar dados moveis</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Segurança</string>
|
||||
<string name="pref_lock_title">Bloqueio de Tela</string>
|
||||
<string name="pref_lock_summary">Use o bloqueio de tela do dispositivo para proteger o Briar enquanto estiver conectado</string>
|
||||
<string name="pref_lock_disabled_summary">Para usar esse recurso, configure um bloqueio de tela para seu dispositivo</string>
|
||||
<string name="pref_lock_timeout_title">Tempo limite de inatividade de bloqueio de tela</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Quando o briar não estiver sendo usando, bloquear automaticamente após %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -394,8 +391,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Mostrar alertas para postagens nos blogs</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurar alertas para posts de blogs</string>
|
||||
<string name="notify_vibration_setting">Vibrar</string>
|
||||
<string name="notify_lock_screen_setting_title">Bloquear a tela</string>
|
||||
<string name="notify_lock_screen_setting_summary">Mostrar notificações enquanto a tela estiver bloqueada</string>
|
||||
<string name="notify_sound_setting">Som</string>
|
||||
<string name="notify_sound_setting_default">Toque padrão</string>
|
||||
<string name="notify_sound_setting_disabled">Nenhum</string>
|
||||
|
||||
@@ -134,7 +134,8 @@
|
||||
<string name="contact_added_toast">Contact adăugat: %s</string>
|
||||
<string name="contact_already_exists">Contactul %s există deja</string>
|
||||
<string name="qr_code_invalid">Codul QR este invalid!</string>
|
||||
<string name="qr_code_unsupported">Codul QR pe care încercați să îl scanați aparține unei versiuni vechi %s care nu mai este acceptată.\n\nVă rugăm să vă asigurați că amândoi aveți cea mai recentă versiune și încercați din nou.</string>
|
||||
<string name="qr_code_too_old">Codul QR pe care l-ați scanat aparține unei versiuni vechi %s.\n\nRugați-vă contactul să actualizeze aplicația la cea mai recentă versiune și apoi încercați din nou.</string>
|
||||
<string name="qr_code_too_new">Codul QR pe care l-ați scanat aparține unei versiuni mai noi %s.\n\nVă rugăm să actualizați aplicația la cea mai recentă versiune și apoi încercați din nou.</string>
|
||||
<string name="camera_error">Eroare la camera foto</string>
|
||||
<string name="connecting_to_device">Conectare la dispozitiv\u2026</string>
|
||||
<string name="authenticating_with_device">Autentificare cu dispozitivul\u2026</string>
|
||||
@@ -349,10 +350,10 @@
|
||||
<string name="tor_mobile_data_title">Utilizează date mobile</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Securitate</string>
|
||||
<string name="pref_lock_title">Blocare ecran</string>
|
||||
<string name="pref_lock_title">Blocare aplicație</string>
|
||||
<string name="pref_lock_summary">Folosește blocarea ecranului dispozitivului pentru a proteja Briar atunci cand sunteți autentificați</string>
|
||||
<string name="pref_lock_disabled_summary">Pentru a utiliza această caracteristică, setați blocarea ecranului dispozitivului dumneavoastră</string>
|
||||
<string name="pref_lock_timeout_title">Perioada de inactivitate înainte de blocarea ecranului</string>
|
||||
<string name="pref_lock_timeout_title">Perioada de inactivitate înainte de blocarea aplicației</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Când Briar nu este folosit, va fi blocat automat după %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -381,6 +382,7 @@
|
||||
<string name="panic_app_setting_none">Nici una</string>
|
||||
<string name="dialog_title_connect_panic_app">Confirmare aplicație de panică</string>
|
||||
<string name="dialog_message_connect_panic_app">Sigur doriți să permiteți %1$s să declanșeze acțiuni destructive pentru butonul de panică?</string>
|
||||
<string name="panic_setting_destructive_action">Acțiuni distructive</string>
|
||||
<string name="panic_setting_signout_title">Ieșire</string>
|
||||
<string name="panic_setting_signout_summary">Ieși din Briar dacă un buton de panică este apăsat</string>
|
||||
<string name="purge_setting_title">Șterge cont</string>
|
||||
@@ -404,8 +406,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Arată alerte pentru mesajele de pe blog</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Configurare alerte pentru mesajele de pe blog</string>
|
||||
<string name="notify_vibration_setting">Vibrează</string>
|
||||
<string name="notify_lock_screen_setting_title">Ecran de blocare</string>
|
||||
<string name="notify_lock_screen_setting_summary">Arată notificări pe ecranul de blocare</string>
|
||||
<string name="notify_sound_setting">Sunet</string>
|
||||
<string name="notify_sound_setting_default">Sunet implicit</string>
|
||||
<string name="notify_sound_setting_disabled">Nici unul</string>
|
||||
|
||||
@@ -141,7 +141,6 @@
|
||||
<string name="contact_added_toast">Контакт добавлен: %s</string>
|
||||
<string name="contact_already_exists">Контакт %s уже существует</string>
|
||||
<string name="qr_code_invalid">Неверный QR-код</string>
|
||||
<string name="qr_code_unsupported">QR-код, который вы пытаетесь отсканировать, создан в старой версии %s, которая больше не поддерживается.\n\nУбедитесь, что у вас обоих установлена последняя версия, а затем повторите попытку.</string>
|
||||
<string name="camera_error">Ошибка камеры</string>
|
||||
<string name="connecting_to_device">Подключение к устройству\u2026</string>
|
||||
<string name="authenticating_with_device">Аутентификация с устройством\u2026</string>
|
||||
@@ -361,10 +360,8 @@
|
||||
<string name="tor_mobile_data_title">Использовать мобильные данные</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Безопасность</string>
|
||||
<string name="pref_lock_title">Блокировка экрана</string>
|
||||
<string name="pref_lock_summary">Использовать блокировку экрана устройства для защиты Briar при входе</string>
|
||||
<string name="pref_lock_disabled_summary">Чтобы использовать эту функцию, установите блокировку экрана вашего устройства</string>
|
||||
<string name="pref_lock_timeout_title">Тайм-аут блокировки блокировки экрана</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Автоматически блокировать Briar через %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -416,8 +413,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Показывать оповещения для постов блога</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Настройка оповещений для постов блога</string>
|
||||
<string name="notify_vibration_setting">Вибрация</string>
|
||||
<string name="notify_lock_screen_setting_title">Экран блокировки</string>
|
||||
<string name="notify_lock_screen_setting_summary">Показывать уведомления на экране блокировки</string>
|
||||
<string name="notify_sound_setting">Звук</string>
|
||||
<string name="notify_sound_setting_default">Мелодия по умолчанию</string>
|
||||
<string name="notify_sound_setting_disabled">Нет</string>
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
<string name="startup_failed_notification_title">Briar-i s\’u nis dot</string>
|
||||
<string name="startup_failed_notification_text">Prekeni për më tepër të dhëna.</string>
|
||||
<string name="startup_failed_activity_title">Dështim Nisjeje i Briar-it</string>
|
||||
<string name="startup_failed_db_error">Për ndonjë arsye, baza e të dhënave të Briar-it është e dëmtuar sa nuk ndreqet dot. Llogaria juaj, të dhënat tuaja dhe krejt kontaktet tuaja humbën. Mjerisht, ju duhet të ri-instaloni Briar-in dhe të rregulloni një llogari të re duke zgjedhur \'Kam harruar fjalëkalimin tim\' te hapi për fjalëkalimin.</string>
|
||||
<string name="startup_failed_data_too_old_error">Llogaria juaj qe krijuar me një version të vjetër të këtij aplikacioni dhe s’mund të hapet me këtë version. Ose duhet të ri-instaloni versionin e vjetër, ose të fshini llogarinë tuaj të vjetër duke zgjedhur \'Kam harruar fjalëkalimin tim\' te hapi për fjalëkalimin.</string>
|
||||
<string name="startup_failed_db_error">Për ndonjë arsye, baza e të dhënave të Briar-it është e dëmtuar sa nuk ndreqet dot. Llogaria juaj, të dhënat tuaja dhe krejt kontaktet tuaja humbën. Mjerisht, ju duhet të ri-instaloni Briar-in dhe të rregulloni një llogari të re, duke zgjedhur \'Kam harruar fjalëkalimin tim\' te hapi për fjalëkalimin.</string>
|
||||
<string name="startup_failed_data_too_old_error">Llogaria juaj qe krijuar me një version të vjetër të këtij aplikacioni dhe s\’mund të hapet me këtë version. Ose duhet të ri-instaloni versionin e vjetër, ose të fshini llogarinë tuaj të vjetër duke zgjedhur \'Kam harruar fjalëkalimin tim\' te hapi për fjalëkalimin.</string>
|
||||
<string name="startup_failed_data_too_new_error">Ky version i aplikacionit është shumë i vjetër. Ju lutemi, përmirësojeni me versionin më të ri dhe riprovoni.</string>
|
||||
<string name="startup_failed_service_error">Briar-i s\’arriti të nisë një shtojcë të domosdoshme. Ri-instalimi i Briar-it zakonisht e zgjidh këtë problem. Por, ju lutemi, kini parasysh se me të do të humbni llogarinë tuaj dhe krejt të dhënat e lidhura me të, ngaqë Briar nuk përdor shërbyes qendrorë për të depozituar në ta të dhënat tuaja.</string>
|
||||
<string name="startup_failed_service_error">Briar-i s\’arriti të nisë një shtojcë të domosdoshme. Zakonisht këtë problem e zgjidh Ri-instalimi i Briar-it. Por, ju lutemi, kini parasysh se me të do të humbni llogarinë tuaj dhe krejt të dhënat e lidhura me të, ngaqë Briar nuk përdor shërbyes qendrorë për të depozituar në ta të dhënat tuaja.</string>
|
||||
<plurals name="expiry_warning">
|
||||
<item quantity="one">Ky është një version beta i Briar-it. Llogaria juaj do të skadojë për %d ditë dhe s\’mund të rinovohet.</item>
|
||||
<item quantity="other">Ky është një version beta i Briar-it. Llogaria juaj do të skadojë për %d ditë dhe s\’mund të rinovohet.</item>
|
||||
@@ -46,7 +46,7 @@
|
||||
<string name="download_briar">Që të vazhdoni të përdorni Briar-in, ju lutemi, shkarkoni versionin 1.0.</string>
|
||||
<string name="create_new_account">Do t’ju duhet të krijoni një llogari të re, por mund të përdorni të njëjtën nofkë.</string>
|
||||
<string name="download_briar_button">Shkarko Briar 1.0</string>
|
||||
<string name="startup_open_database">Po shfshehtëzohet Baza e të dhënave…</string>
|
||||
<string name="startup_open_database">Po shfshehtëzohet Baza e të Dhënave…</string>
|
||||
<string name="startup_migrate_database">Po përditësohet Baza e të dhënave…</string>
|
||||
<!--Navigation Drawer-->
|
||||
<string name="nav_drawer_open_description">Hap sirtarin e lëvizjeve</string>
|
||||
@@ -129,7 +129,8 @@
|
||||
<string name="contact_added_toast">Kontakti u shtua: %s</string>
|
||||
<string name="contact_already_exists">Kontakti %s ekziston tashmë</string>
|
||||
<string name="qr_code_invalid">Kodi QR është i pavlefshëm</string>
|
||||
<string name="qr_code_unsupported">Kodi QR që po provoni të skanoni më poshtë i përket një versioni të vjetër të %s-it, i cili nuk mbulohet më.\n\nJu lutemi, sigurohuni që që të dy ju xhironi versionin më të ri dhe mandej riprovoni.</string>
|
||||
<string name="qr_code_too_old">Kodi QR që keni skanuar vjen prej një versioni të vjetër të %s-it.\n\nJu lutemi, kërkojini kontaktit tuaj ta përmirësojë me versionin më të ri dhe mandej riprovoni.</string>
|
||||
<string name="qr_code_too_new">Kodi QR që keni skanuar vjen prej një versioni më të ri të %s-it.\n\nJu lutemi, përmirësojeni me versionin më të ri dhe mandej riprovoni.</string>
|
||||
<string name="camera_error">Gabim kamere</string>
|
||||
<string name="connecting_to_device">Po lidhet me pajisjen\u2026</string>
|
||||
<string name="authenticating_with_device">Po bëhet mirëfilltësimi me pajisjen\u2026</string>
|
||||
@@ -199,15 +200,15 @@
|
||||
<string name="groups_invitations_invitation_sent">Keni ftuar %1$s të bëhet pjesë e grupit \"%2$s\".</string>
|
||||
<string name="groups_invitations_invitation_received">%1$s ju ka ftuar të bëheni pjesë e grupit \"%2$s\".</string>
|
||||
<string name="groups_invitations_joined">U bëtë pjesë e grupit</string>
|
||||
<string name="groups_invitations_declined">Ftesa e grupit u hodh poshtë</string>
|
||||
<string name="groups_invitations_declined">Ftesa për në grup u hodh poshtë</string>
|
||||
<plurals name="groups_invitations_open">
|
||||
<item quantity="one">%d ftesë grupi e hapur</item>
|
||||
<item quantity="other">%d ftesa grupi të hapura</item>
|
||||
</plurals>
|
||||
<string name="groups_invitations_response_accepted_sent">Pranuat ftesën e grupit nga %s.</string>
|
||||
<string name="groups_invitations_response_declined_sent">Hodhët poshtë ftesën e grupit nga %s.</string>
|
||||
<string name="groups_invitations_response_declined_sent">Hodhët poshtë ftesën për në grup nga %s.</string>
|
||||
<string name="groups_invitations_response_accepted_received">%s e pranoi ftesën e grupit.</string>
|
||||
<string name="groups_invitations_response_declined_received">%s e hodhi poshtë ftesën e grupit.</string>
|
||||
<string name="groups_invitations_response_declined_received">%s e hodhi poshtë ftesën për në grup.</string>
|
||||
<string name="sharing_status_groups">Vetëm krijuesi mund të ftojë anëtarë të rinj në grup. Më poshtë gjenden tërë anëtarët e tanishëm të grupit.</string>
|
||||
<!--Private Groups Revealing Contacts-->
|
||||
<string name="groups_reveal_contacts">Shfaqua Kontaktet</string>
|
||||
@@ -217,7 +218,7 @@
|
||||
<string name="groups_reveal_visible_revealed_by_contact">Marrëdhënia e kontaktit është e dukshme për grupin (shfaqur nga %s)</string>
|
||||
<string name="groups_reveal_invisible">Marrëdhënia e kontaktit s\’është e dukshme për grupin</string>
|
||||
<!--Forums-->
|
||||
<string name="no_forums">S’ka forume për shfaqje</string>
|
||||
<string name="no_forums">S\’ka forume për shfaqje</string>
|
||||
<string name="no_forums_action">Prekni ikonën + që të krijoni një forum, ose kërkojuni kontakteve tuaj të ndajnë forume me ju</string>
|
||||
<string name="create_forum_title">Krijoje Forumin</string>
|
||||
<string name="choose_forum_hint">Zgjidhni një emër për forumin tuaj</string>
|
||||
@@ -278,7 +279,7 @@
|
||||
<string name="blogs_blog_post_scroll_to">Kalo Te</string>
|
||||
<string name="blogs_feed_empty_state">S\’ka postime për shfaqje</string>
|
||||
<string name="blogs_feed_empty_state_action">Këtu do të shfaqet postimet nga kontaktet tuaja dhe blogjet që ndiqni\n\nQë të shkruani një postim, prekni ikonën penë</string>
|
||||
<string name="blogs_remove_blog">hiqe Blogun</string>
|
||||
<string name="blogs_remove_blog">Hiqe Blogun</string>
|
||||
<string name="blogs_remove_blog_dialog_message">Jeni i sigurt se doni të hiqet ky blog?\n\nPostimet do të hiqen nga pajisja juaj, por jo nga pajisjet e personave të tjerë.\n\nÇfarëdo kontaktesh me të cilët e keni ndarë këtë blog mund të reshtin së marri përditësime.</string>
|
||||
<string name="blogs_remove_blog_ok">Hiqe</string>
|
||||
<string name="blogs_blog_removed">Blogu u hoq</string>
|
||||
@@ -292,7 +293,7 @@
|
||||
<string name="blogs_sharing_response_accepted_sent">Pranuat ftesën e blogut nga %s.</string>
|
||||
<string name="blogs_sharing_response_declined_sent">Hodhët poshtë ftesën e blogut nga %s.</string>
|
||||
<string name="blogs_sharing_response_accepted_received">%s pranoi ftesën e blogut.</string>
|
||||
<string name="blogs_sharing_response_declined_received">%s hodhi poshtë ftesën e blogut.</string>
|
||||
<string name="blogs_sharing_response_declined_received">%s hodhi poshtë ftesë blogu.</string>
|
||||
<string name="blogs_sharing_invitation_received">%1$s ndau me ju \"%2$s\".</string>
|
||||
<string name="blogs_sharing_invitation_sent">Ndatë blogun \"%1$s\" me %2$s.</string>
|
||||
<string name="blogs_sharing_invitations_title">Ftesa Blogu</string>
|
||||
@@ -309,7 +310,7 @@
|
||||
<string name="blogs_rss_feeds_manage_author">Autor:</string>
|
||||
<string name="blogs_rss_feeds_manage_updated">Përditësuar Së Fundi:</string>
|
||||
<string name="blogs_rss_remove_feed">Hiqe Prurjen</string>
|
||||
<string name="blogs_rss_remove_feed_dialog_message">Jeni i sigurt se doni të hiqet kjo prurje?\n\nPostimet do të hiqen nga pajisja juaj, por jo nga pajisjet e njerëzve të tjerë.\n\nÇfarëdo kontaktesh me të cilët e keni ndarë këtë prurje mund të reshtin së marri përditësime.</string>
|
||||
<string name="blogs_rss_remove_feed_dialog_message">Jeni i sigurt se doni të hiqet kjo prurje?\n\nPostimet do të hiqen nga pajisja juaj, por jo nga pajisjet e personave të tjerë.\n\nÇfarëdo kontaktesh me të cilët e keni ndarë këtë prurje mund të reshtin së marri përditësime.</string>
|
||||
<string name="blogs_rss_remove_feed_ok">Hiqe</string>
|
||||
<string name="blogs_rss_feeds_manage_delete_error">S\’u fshi dot prurja!</string>
|
||||
<string name="blogs_rss_feeds_manage_empty_state">S’ka prurje RSS për shfaqje\n\nPrekni ikonën + që të importohet një prurje</string>
|
||||
@@ -339,14 +340,14 @@
|
||||
<string name="tor_mobile_data_title">Përdor të dhëna celulare</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Siguri</string>
|
||||
<string name="pref_lock_title">Kyçje ekrani</string>
|
||||
<string name="pref_lock_title">Kyçje aplikacioni</string>
|
||||
<string name="pref_lock_summary">Përdorni kyçjen e ekranit të pajisjes që të mbroni Briar-in teksa keni bërë hyrjen në llogari </string>
|
||||
<string name="pref_lock_disabled_summary">Që të përdorni këtë veçori, rregulloni kyçje ekrani për pajisjen tuaj</string>
|
||||
<string name="pref_lock_timeout_title">Afat mosveprimi për kyçje ekrani</string>
|
||||
<string name="pref_lock_timeout_title">Skadim kohe mosveprimtarie për kyçje aplikacioni</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Kur Briar-i s’është në përdorim, kyçe vetvetiu pas %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
<string name="pref_lock_timeout_1">1 minuti</string>
|
||||
<string name="pref_lock_timeout_1">1 minute</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
<string name="pref_lock_timeout_5">5 minutash</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -360,7 +361,7 @@
|
||||
<string name="change_password">Ndryshoni fjalëkalimin</string>
|
||||
<string name="current_password">Fjalëkalimi i tanishëm</string>
|
||||
<string name="choose_new_password">Fjalëkalim i ri</string>
|
||||
<string name="confirm_new_password">Konfirmo fjalëkalimin e ri</string>
|
||||
<string name="confirm_new_password">Riopohoni fjalëkalimin e ri</string>
|
||||
<string name="password_changed">Fjalëkalimi u ndryshua.</string>
|
||||
<string name="panic_setting">Rregullimi i butonit të panikut</string>
|
||||
<string name="panic_setting_title">Buton paniku</string>
|
||||
@@ -371,6 +372,7 @@
|
||||
<string name="panic_app_setting_none">Asnjë</string>
|
||||
<string name="dialog_title_connect_panic_app">Ripohoni Aplikacion Paniku</string>
|
||||
<string name="dialog_message_connect_panic_app">Jeni i sigurt se doni të lejohet %1$s të prodhojë veprime shkatërruese butoni paniku?</string>
|
||||
<string name="panic_setting_destructive_action">Veprime Shkatërruese</string>
|
||||
<string name="panic_setting_signout_title">Dilni</string>
|
||||
<string name="panic_setting_signout_summary">Dil nga Briar-i nëse shtypet një buton paniku</string>
|
||||
<string name="purge_setting_title">Fshi Llogarinë</string>
|
||||
@@ -394,8 +396,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">Shfaq sinjalizime për postime blogu</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Formësoni sinjalizime për postime blogu</string>
|
||||
<string name="notify_vibration_setting">Dridhu</string>
|
||||
<string name="notify_lock_screen_setting_title">Kyçe Ekranin</string>
|
||||
<string name="notify_lock_screen_setting_summary">Shfaqi njoftimet edhe me ekran të kyçur</string>
|
||||
<string name="notify_sound_setting">Tingull</string>
|
||||
<string name="notify_sound_setting_default">Zilja parazgjedhje</string>
|
||||
<string name="notify_sound_setting_disabled">Asnjë</string>
|
||||
@@ -407,10 +407,10 @@
|
||||
<!--Link Warning-->
|
||||
<string name="link_warning_title">Sinjalizim Lidhjeje</string>
|
||||
<string name="link_warning_intro">Ju ndan një hap nga hapja e lidhjes vijuese me një aplikacion të jashtëm.</string>
|
||||
<string name="link_warning_text">Kjo mund të përdoret për t\’ju identifikuar. Mendohuni nëse e besoni apo jo personin që ju dërgoi këtë lidhje dhe shihni mundësinë e hapjes së sja me Orfox</string>
|
||||
<string name="link_warning_text">Kjo mund të përdoret për t\’ju identifikuar. Mendohuni nëse e besoni apo jo personin që ju dërgoi këtë lidhje dhe shihni mundësinë e hapjes së saj me Orfox</string>
|
||||
<string name="link_warning_open_link">Hape Lidhjen</string>
|
||||
<!--Crash Reporter-->
|
||||
<string name="crash_report_title">Njoftim Vithisjesh Briar</string>
|
||||
<string name="crash_report_title">Njoftim Vithisjesh Briar-i</string>
|
||||
<string name="briar_crashed">Na ndjeni, Briar-i u vithis.</string>
|
||||
<string name="not_your_fault">S\’është faji juaj.</string>
|
||||
<string name="please_send_report">Ju lutemi, na ndihmoni të ndërtojmë një Briar më të mirë, duke na dërguar një njoftim vithisjeje.</string>
|
||||
@@ -429,20 +429,20 @@
|
||||
<string name="progress_title_logout">Po dilet nga Briar-i…</string>
|
||||
<!--Screen Filters & Tapjacking-->
|
||||
<string name="screen_filter_title">U kap dalje jashtë ekrani</string>
|
||||
<string name="screen_filter_body">Sipër Briar-it po vizaton një tjetër aplikacion. Për të mbrojtur sigurinë tuaj, Briar-i nuk do t’u përgjigjet prekjeve kur një tjetër aplikacion vizaton përsipër.\n\nPërsipër mund të jenë duke vizatuar aplikacionet vijues:\n\n%1$s</string>
|
||||
<string name="screen_filter_body">Sipër Briar-it po vizaton një tjetër aplikacion. Për të mbrojtur sigurinë tuaj, Briar-i nuk do t\’u përgjigjet prekjeve kur një tjetër aplikacion vizaton përsipër.\n\nPërsipër mund të jenë duke vizatuar aplikacionet vijues:\n\n%1$s</string>
|
||||
<string name="screen_filter_allow">Lejoji këto aplikacione të vizatojnë përsipër</string>
|
||||
<!--Permission Requests-->
|
||||
<string name="permission_camera_title">Leje mbi kamerën</string>
|
||||
<string name="permission_camera_request_body">Që të skanojë kodin QR, Briar-i lypset të hyjë te kamera.</string>
|
||||
<string name="permission_camera_denied_body">Keni mohuar hyrjen në kamera, por shtimi i kontakteve lyp përdorimin e kamerës.\n\nJu lutemi, shihni mundësinë e akordimit të hyrjes.</string>
|
||||
<string name="permission_camera_denied_toast">S\’u dhanë leje mbi kamerën</string>
|
||||
<string name="permission_camera_denied_toast">S\’u akorduan leje mbi kamerën</string>
|
||||
<string name="qr_code">Kod QR</string>
|
||||
<string name="show_qr_code_fullscreen">Shfaqe kodin QR sa tërë ekrani</string>
|
||||
<!--App Locking-->
|
||||
<string name="lock_unlock">Shkyçe Briar-in</string>
|
||||
<string name="lock_unlock_verbose">Jepni PIN-in, mostrën ose fjalëkalimin e pajisjes tuaj, që të shkyçet Briar-i</string>
|
||||
<string name="lock_unlock_fingerprint_description">Prekni sensorin e shenjave të gishtërinjëve me gishtin e regjistruar për të vazhduar</string>
|
||||
<string name="lock_unlock_password">Përdorni fjalëkalimin</string>
|
||||
<string name="lock_unlock_verbose">Që të shkyçet Briar-i, jepni PIN-in, mostrën ose fjalëkalimin e pajisjes tuaj</string>
|
||||
<string name="lock_unlock_fingerprint_description">Që të vazhdohet, prekni me gishtin e regjistruar ndijuesin e shenjave të gishtave</string>
|
||||
<string name="lock_unlock_password">Përdor Fjalëkalim</string>
|
||||
<string name="lock_is_locked">Briar-i është i kyçur</string>
|
||||
<string name="lock_tap_to_unlock">Prekeni që të shkyçet</string>
|
||||
</resources>
|
||||
|
||||
@@ -136,9 +136,6 @@ Izaberite dugačku lozinku koju je teško pogoditi, kao četiri nasumične rije
|
||||
<string name="contact_added_toast">Kontakt dodat: %s</string>
|
||||
<string name="contact_already_exists">Kontakt %s već postoji</string>
|
||||
<string name="qr_code_invalid">QR kod nije validan</string>
|
||||
<string name="qr_code_unsupported">QR kod koji skenirate pripada staroj verziji %s koja nije više podržana.
|
||||
|
||||
Molim vas provjerite da oboje imate posljednju verziju a onda pokušajte ponovo.</string>
|
||||
<string name="camera_error">Greska kamere</string>
|
||||
<string name="connecting_to_device">Povezujem se sa uređajem\u2026</string>
|
||||
<string name="authenticating_with_device">Autentikacija sa uređajem\u2026</string>
|
||||
@@ -369,10 +366,10 @@ Dotaknite + ikonu da uvezete kanal</string>
|
||||
<string name="tor_mobile_data_title">Koristi mobilinu mrežu</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">Sigurnost</string>
|
||||
<string name="pref_lock_title">Zaključavanje ekrana</string>
|
||||
<string name="pref_lock_title">Zakljucavanje applikacije</string>
|
||||
<string name="pref_lock_summary">Koristi zaključavanje ekrana uređaja da bi zaštitili Briar dok ste prijavljeni</string>
|
||||
<string name="pref_lock_disabled_summary">Da bi koristili ovu mogućnost, podesite zaključavanje ekrana za vaš uređaj</string>
|
||||
<string name="pref_lock_timeout_title">Isteklo vrijeme neaktivnosti zaključavanja ekrana</string>
|
||||
<string name="pref_lock_timeout_title">Zaključavanje aplikacije po neaktivnosti</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">Kada se ne koristi Briar, automatski zaključaj poslije %s</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -424,8 +421,6 @@ Dotaknite + ikonu da uvezete kanal</string>
|
||||
<string name="notify_blog_posts_setting_summary">Prikaži upozorenja na blog postove</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">Podesite upozorenja za blog postove</string>
|
||||
<string name="notify_vibration_setting">Vibriranje</string>
|
||||
<string name="notify_lock_screen_setting_title">Zaključaj ekran</string>
|
||||
<string name="notify_lock_screen_setting_summary">Prikaži obavještenja na zaključanom ekranu</string>
|
||||
<string name="notify_sound_setting">Zvuk</string>
|
||||
<string name="notify_sound_setting_default">Podrazumijevanio zvono</string>
|
||||
<string name="notify_sound_setting_disabled">Ništa</string>
|
||||
|
||||
@@ -124,7 +124,6 @@
|
||||
<string name="contact_added_toast">联系人已添加:%s</string>
|
||||
<string name="contact_already_exists">联系人 %s 已存在</string>
|
||||
<string name="qr_code_invalid">二维码无效</string>
|
||||
<string name="qr_code_unsupported">您正在扫描的是来自旧版本 %s 版的二维码,该版本目前已不再支持。\n\n请确保你们两人都在运行最新版本并重试。</string>
|
||||
<string name="camera_error">相机出错</string>
|
||||
<string name="connecting_to_device">正在连接至设备\u2026</string>
|
||||
<string name="authenticating_with_device">正在验证设备\u2026</string>
|
||||
@@ -329,10 +328,8 @@
|
||||
<string name="tor_mobile_data_title">使用移动数据</string>
|
||||
<!--Settings Security and Panic-->
|
||||
<string name="security_settings_title">安全</string>
|
||||
<string name="pref_lock_title">屏幕锁定</string>
|
||||
<string name="pref_lock_summary">登录后,使用设备的屏幕锁定保护 Briar</string>
|
||||
<string name="pref_lock_disabled_summary">为了使用该功能,请为设备设置屏幕锁定</string>
|
||||
<string name="pref_lock_timeout_title">屏幕锁定所需的无操作时间</string>
|
||||
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
|
||||
<string name="pref_lock_timeout_summary">当有 %s 不使用 Briar 后,自动将其锁定</string>
|
||||
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
|
||||
@@ -384,8 +381,6 @@
|
||||
<string name="notify_blog_posts_setting_summary">显示博文通知</string>
|
||||
<string name="notify_blog_posts_setting_summary_26">设置博文通知</string>
|
||||
<string name="notify_vibration_setting">震动</string>
|
||||
<string name="notify_lock_screen_setting_title">锁定屏幕</string>
|
||||
<string name="notify_lock_screen_setting_summary">在锁定屏幕上显示通知</string>
|
||||
<string name="notify_sound_setting">声音</string>
|
||||
<string name="notify_sound_setting_default">默认铃声</string>
|
||||
<string name="notify_sound_setting_disabled">无</string>
|
||||
|
||||
@@ -398,6 +398,7 @@
|
||||
<string name="panic_app_setting_none">None</string>
|
||||
<string name="dialog_title_connect_panic_app">Confirm Panic App</string>
|
||||
<string name="dialog_message_connect_panic_app">Are you sure that you want to allow %1$s to trigger destructive panic button actions?</string>
|
||||
<string name="panic_setting_destructive_action">Destructive Actions</string>
|
||||
<string name="panic_setting_signout_title">Sign Out</string>
|
||||
<string name="panic_setting_signout_summary">Sign out of Briar if a panic button is pressed</string>
|
||||
<string name="purge_setting_title">Delete Account</string>
|
||||
@@ -479,4 +480,20 @@
|
||||
<string name="lock_is_locked">Briar is locked</string>
|
||||
<string name="lock_tap_to_unlock">Tap to unlock</string>
|
||||
|
||||
<!-- Screenshots -->
|
||||
|
||||
<!-- This is a name to be used in screenshots. Feel free to change it to a local name. -->
|
||||
<string name="screenshot_alice">Alice</string>
|
||||
<!-- This is a name to be used in screenshots. Feel free to change it to a local name. -->
|
||||
<string name="screenshot_bob">Bob</string>
|
||||
<!-- This is a name to be used in screenshots. Feel free to change it to a local name. -->
|
||||
<string name="screenshot_carol">Carol</string>
|
||||
<!-- This is a message to be used in screenshots. Please use the same translation for Bob! -->
|
||||
<string name="screenshot_message_1">Hi Bob!</string>
|
||||
<!-- This is a message to be used in screenshots. Please use the same translation for Alice! -->
|
||||
<string name="screenshot_message_2">Hi Alice! Thanks for telling me about Briar!</string>
|
||||
<!-- This is a message to be used in screenshots. -->
|
||||
<string name="screenshot_message_3">No problem, hope you like it 😀</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -2,31 +2,29 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<ListPreference
|
||||
android:icon="@android:drawable/ic_menu_close_clear_cancel"
|
||||
android:key="pref_key_panic_app"
|
||||
android:summary="@string/panic_app_setting_summary"
|
||||
android:title="@string/panic_app_setting_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:enabled="false"
|
||||
android:key="pref_key_lock"
|
||||
android:summary="@string/panic_setting_signout_summary"
|
||||
android:title="@string/panic_setting_signout_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:enabled="false"
|
||||
android:key="pref_key_purge"
|
||||
android:summary="@string/purge_setting_summary"
|
||||
android:title="@string/purge_setting_title"/>
|
||||
<PreferenceCategory
|
||||
android:layout="@layout/preferences_category"
|
||||
android:title="@string/panic_setting_destructive_action">
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:enabled="false"
|
||||
android:key="pref_key_uninstall"
|
||||
android:summary="@string/uninstall_setting_summary"
|
||||
android:title="@string/uninstall_setting_title"/>
|
||||
<ListPreference
|
||||
android:icon="@android:drawable/ic_menu_close_clear_cancel"
|
||||
android:key="pref_key_panic_app"
|
||||
android:summary="@string/panic_app_setting_summary"
|
||||
android:title="@string/panic_app_setting_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:enabled="false"
|
||||
android:key="pref_key_purge"
|
||||
android:summary="@string/purge_setting_summary"
|
||||
android:title="@string/purge_setting_title"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -82,6 +82,7 @@ dependencyVerification {
|
||||
'com.google.zxing:core:3.3.0:core-3.3.0.jar:bba7724e02a997cec38213af77133ee8e24b0d5cf5fa7ecbc16a4fa93f11ee0d',
|
||||
'com.googlecode.json-simple:json-simple:1.1:json-simple-1.1.jar:2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439',
|
||||
'com.ibm.icu:icu4j:53.1:icu4j-53.1.jar:e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab',
|
||||
'com.jraska:falcon:1.0.4:falcon-1.0.4.aar:6114a48d8b3814f75fc69b5e84dc087c1254883874eae8a36bd778979800630a',
|
||||
'com.squareup:javawriter:2.1.1:javawriter-2.1.1.jar:f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e',
|
||||
'com.squareup:javawriter:2.5.0:javawriter-2.5.0.jar:fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0',
|
||||
'com.sun.activation:javax.activation:1.2.0:javax.activation-1.2.0.jar:993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce',
|
||||
@@ -171,7 +172,7 @@ dependencyVerification {
|
||||
'org.robolectric:shadows-framework:3.8:shadows-framework-3.8.jar:83548db7249edf1af87e1a1f4d8f4eec3e85d6220161da601e6f6398476911b2',
|
||||
'org.robolectric:shadows-support-v4:3.3.2:shadows-support-v4-3.3.2.jar:6f689264738266e70fe08db7c04b7b5a75155994f4e3f7f311960d90486bf005',
|
||||
'org.robolectric:utils:3.8:utils-3.8.jar:e945d04d40e37554e02d4be1bc3abf9bede45375c843aa36d10ccb6b63edbf34',
|
||||
'tools.fastlane:screengrab:1.1.0:screengrab-1.1.0.aar:03ce3868ee8a0082d14e7a1de0999f91531c0cc794392688beb08ee9bc4495fd',
|
||||
'tools.fastlane:screengrab:1.2.0:screengrab-1.2.0.aar:af4ee23bb06f94404d3ab18e2ea69db8265539fc8da29f9ee45b7e472684ba83',
|
||||
'uk.co.samuelwall:material-tap-target-prompt:2.8.0:material-tap-target-prompt-2.8.0.aar:ac70770c05bbc4675a1d5712c0e53d46ee4fa961b74947589fce50d8003065ec',
|
||||
'xmlpull:xmlpull:1.1.3.1:xmlpull-1.1.3.1.jar:34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63',
|
||||
'xpp3:xpp3_min:1.1.4c:xpp3_min-1.1.4c.jar:bfc90e9e32d0eab1f397fb974b5f150a815188382ac41f372a7149d5bc178008',
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.briarproject.briar.api.test;
|
||||
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.bramble.api.contact.Contact;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
|
||||
@NotNullByDefault
|
||||
public interface TestDataCreator {
|
||||
|
||||
/**
|
||||
* Create fake test data on the DatabaseExecutor
|
||||
* Create fake test data on the IoExecutor
|
||||
*
|
||||
* @param numContacts Number of contacts to create. Must be >= 1
|
||||
* @param numPrivateMsgs Number of private messages to create for each
|
||||
@@ -18,4 +22,11 @@ public interface TestDataCreator {
|
||||
void createTestData(int numContacts, int numPrivateMsgs, int numBlogPosts,
|
||||
int numForums, int numForumPosts);
|
||||
|
||||
@IoExecutor
|
||||
Contact addContact(String name) throws DbException;
|
||||
|
||||
@IoExecutor
|
||||
void addPrivateMessage(Contact contact, String body, long time,
|
||||
boolean local) throws DbException, FormatException;
|
||||
|
||||
}
|
||||
|
||||
@@ -13,9 +13,11 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.Transaction;
|
||||
import org.briarproject.bramble.api.identity.AuthorFactory;
|
||||
import org.briarproject.bramble.api.identity.AuthorId;
|
||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||
import org.briarproject.bramble.api.identity.LocalAuthor;
|
||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.bramble.api.plugin.BluetoothConstants;
|
||||
import org.briarproject.bramble.api.plugin.LanTcpConstants;
|
||||
import org.briarproject.bramble.api.plugin.TorConstants;
|
||||
@@ -59,6 +61,7 @@ import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.test.TestData.AUTHOR_NAMES;
|
||||
import static org.briarproject.briar.test.TestData.GROUP_NAMES;
|
||||
|
||||
@NotNullByDefault
|
||||
public class TestDataCreatorImpl implements TestDataCreator {
|
||||
|
||||
private final Logger LOG =
|
||||
@@ -146,17 +149,17 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
||||
List<Contact> contacts = new ArrayList<>(numContacts);
|
||||
LocalAuthor localAuthor = identityManager.getLocalAuthor();
|
||||
for (int i = 0; i < numContacts; i++) {
|
||||
Contact contact = addRandomContact(localAuthor);
|
||||
LocalAuthor author = getRandomAuthor();
|
||||
Contact contact = addContact(localAuthor.getId(), author);
|
||||
contacts.add(contact);
|
||||
}
|
||||
return contacts;
|
||||
}
|
||||
|
||||
private Contact addRandomContact(LocalAuthor localAuthor)
|
||||
private Contact addContact(AuthorId localAuthorId, LocalAuthor author)
|
||||
throws DbException {
|
||||
|
||||
// prepare to add contact
|
||||
LocalAuthor author = getRandomAuthor();
|
||||
SecretKey secretKey = getSecretKey();
|
||||
long timestamp = clock.currentTimeMillis();
|
||||
boolean verified = random.nextBoolean();
|
||||
@@ -169,7 +172,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
||||
Transaction txn = db.startTransaction(false);
|
||||
try {
|
||||
ContactId contactId = contactManager
|
||||
.addContact(txn, author, localAuthor.getId(), secretKey,
|
||||
.addContact(txn, author, localAuthorId, secretKey,
|
||||
timestamp, true, verified, true);
|
||||
transportPropertyManager.addRemoteProperties(txn, contactId, props);
|
||||
contact = db.getContact(txn, contactId);
|
||||
@@ -186,14 +189,23 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
||||
return contact;
|
||||
}
|
||||
|
||||
private LocalAuthor getRandomAuthor() {
|
||||
int i = random.nextInt(AUTHOR_NAMES.length);
|
||||
String authorName = AUTHOR_NAMES[i];
|
||||
@Override
|
||||
public Contact addContact(String name) throws DbException {
|
||||
LocalAuthor localAuthor = identityManager.getLocalAuthor();
|
||||
return addContact(localAuthor.getId(), getAuthor(name));
|
||||
}
|
||||
|
||||
private LocalAuthor getAuthor(String name) {
|
||||
KeyPair keyPair = cryptoComponent.generateSignatureKeyPair();
|
||||
byte[] publicKey = keyPair.getPublic().getEncoded();
|
||||
byte[] privateKey = keyPair.getPrivate().getEncoded();
|
||||
return authorFactory.createLocalAuthor(authorName, publicKey,
|
||||
privateKey);
|
||||
return authorFactory.createLocalAuthor(name, publicKey, privateKey);
|
||||
}
|
||||
|
||||
private LocalAuthor getRandomAuthor() {
|
||||
int i = random.nextInt(AUTHOR_NAMES.length);
|
||||
String authorName = AUTHOR_NAMES[i];
|
||||
return getAuthor(authorName);
|
||||
}
|
||||
|
||||
private SecretKey getSecretKey() {
|
||||
@@ -285,7 +297,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
||||
Group group = messagingManager.getContactGroup(contact);
|
||||
for (int i = 0; i < numPrivateMsgs; i++) {
|
||||
try {
|
||||
createPrivateMessage(group.getId(), i);
|
||||
createRandomPrivateMessage(group.getId(), i);
|
||||
} catch (FormatException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -297,14 +309,18 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
||||
}
|
||||
}
|
||||
|
||||
private void createPrivateMessage(GroupId groupId, int num)
|
||||
private void createRandomPrivateMessage(GroupId groupId, int num)
|
||||
throws DbException, FormatException {
|
||||
long timestamp = clock.currentTimeMillis() - num * 60 * 1000;
|
||||
String body = getRandomText();
|
||||
boolean local = random.nextBoolean();
|
||||
createPrivateMessage(groupId, body, timestamp, local);
|
||||
}
|
||||
|
||||
private void createPrivateMessage(GroupId groupId, String body,
|
||||
long timestamp, boolean local) throws DbException, FormatException {
|
||||
PrivateMessage m = privateMessageFactory
|
||||
.createPrivateMessage(groupId, timestamp, body);
|
||||
|
||||
boolean local = random.nextBoolean();
|
||||
BdfDictionary meta = new BdfDictionary();
|
||||
meta.put("timestamp", timestamp);
|
||||
meta.put("local", local);
|
||||
@@ -321,6 +337,13 @@ public class TestDataCreatorImpl implements TestDataCreator {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPrivateMessage(Contact contact, String body, long time,
|
||||
boolean local) throws DbException, FormatException {
|
||||
Group group = messagingManager.getContactGroup(contact);
|
||||
createPrivateMessage(group.getId(), body, time, local);
|
||||
}
|
||||
|
||||
private void createBlogPosts(List<Contact> contacts, int numBlogPosts)
|
||||
throws DbException {
|
||||
for (int i = 0; i < numBlogPosts; i++) {
|
||||
|
||||
Reference in New Issue
Block a user