Screen Lock: Second round of addressing review comments

parent 68637276
......@@ -321,11 +321,8 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
@Override
public void updateForegroundNotification(boolean lockable,
boolean locked) {
NotificationManager nm = (NotificationManager) appContext
.getSystemService(NOTIFICATION_SERVICE);
assert nm != null;
Notification n = getForegroundNotification(lockable, locked);
nm.notify(ONGOING_NOTIFICATION_ID, n);
notificationManager.notify(ONGOING_NOTIFICATION_ID, n);
}
private void showContactNotification(ContactId c) {
......
......@@ -205,8 +205,9 @@ public class AppModule {
@Provides
@Singleton
LockManager provideLockManager(LifecycleManager lifecycleManager,
LockManagerImpl lockManager) {
EventBus eventBus, LockManagerImpl lockManager) {
lifecycleManager.registerService(lockManager);
eventBus.addListener(lockManager);
return lockManager;
}
......
......@@ -4,14 +4,18 @@ import android.app.Application;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.content.Context;
import android.support.annotation.UiThread;
import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.lifecycle.Service;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
import org.briarproject.briar.api.android.AndroidNotificationManager;
import org.briarproject.briar.api.android.LockManager;
......@@ -30,10 +34,10 @@ import static org.briarproject.briar.android.util.UiUtils.hasScreenLock;
@ThreadSafe
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class LockManagerImpl implements LockManager, Service {
public class LockManagerImpl implements LockManager, Service, EventListener {
private static final Logger LOG =
Logger.getLogger(LockManagerImpl.class.getSimpleName());
Logger.getLogger(LockManagerImpl.class.getName());
private final Context appContext;
private final SettingsManager settingsManager;
......@@ -53,6 +57,7 @@ public class LockManagerImpl implements LockManager, Service {
this.notificationManager = notificationManager;
this.dbExecutor = dbExecutor;
// setting these in the constructor makes #getValue() @NonNull
this.locked.setValue(false);
this.lockable.setValue(false);
}
......@@ -61,17 +66,7 @@ public class LockManagerImpl implements LockManager, Service {
public void startService() {
lockable.observeForever(this::onLockableChanged);
if (hasScreenLock(appContext)) {
dbExecutor.execute(() -> {
try {
Settings settings =
settingsManager.getSettings(SETTINGS_NAMESPACE);
boolean lockable =
settings.getBoolean(PREF_SCREEN_LOCK, false);
this.lockable.postValue(lockable);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
loadLockableSetting();
} else {
lockable.postValue(false);
}
......@@ -82,6 +77,33 @@ public class LockManagerImpl implements LockManager, Service {
lockable.removeObserver(this::onLockableChanged);
}
@Override
public void eventOccurred(Event event) {
if (event instanceof SettingsUpdatedEvent) {
SettingsUpdatedEvent e = (SettingsUpdatedEvent) event;
String namespace = e.getNamespace();
if (namespace.equals(SETTINGS_NAMESPACE)) {
loadLockableSetting();
}
}
}
private void loadLockableSetting() {
dbExecutor.execute(() -> {
try {
Settings settings =
settingsManager.getSettings(SETTINGS_NAMESPACE);
boolean lockable =
settings.getBoolean(PREF_SCREEN_LOCK, false);
boolean newValue = hasScreenLock(appContext) && lockable;
this.lockable.postValue(newValue);
} catch (DbException e) {
logException(LOG, WARNING, e);
this.lockable.postValue(false);
}
});
}
private void onLockableChanged(boolean lockable) {
notificationManager
.updateForegroundNotification(lockable, locked.getValue());
......@@ -92,6 +114,7 @@ public class LockManagerImpl implements LockManager, Service {
return lockable;
}
@UiThread
@Override
public void recheckLockable() {
boolean oldValue = this.lockable.getValue();
......@@ -101,15 +124,6 @@ public class LockManagerImpl implements LockManager, Service {
}
}
@Override
public void updateLockableSetting(boolean lockable) {
boolean oldValue = this.lockable.getValue();
boolean newValue = hasScreenLock(appContext) && lockable;
if (oldValue != newValue) {
this.lockable.setValue(newValue);
}
}
@Override
public LiveData<Boolean> isLocked() {
return locked;
......
......@@ -35,7 +35,6 @@ import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSW
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_UNLOCK;
import static org.briarproject.briar.android.util.UiUtils.getDozeWhitelistingIntent;
import static org.briarproject.briar.android.util.UiUtils.isSamsung7;
import static org.briarproject.briar.android.util.UiUtils.showAndroidHomeScreen;
@SuppressLint("Registered")
public abstract class BriarActivity extends BaseActivity {
......@@ -71,12 +70,12 @@ public abstract class BriarActivity extends BaseActivity {
if (!briarController.accountSignedIn() && !isFinishing()) {
Intent i = new Intent(this, PasswordActivity.class);
startActivityForResult(i, REQUEST_PASSWORD);
} else if(lockManager.isLocked().getValue()) {
} else if (lockManager.isLocked().getValue()) {
Intent i = new Intent(this, UnlockActivity.class);
startActivityForResult(i, REQUEST_UNLOCK);
} else {
lockManager.isLocked().observe(this, locked -> {
if (locked != null && locked) showAndroidHomeScreen(this);
if (locked != null && locked) moveTaskToBack(true);
});
lockManager.recheckLockable();
if (SDK_INT >= 23) {
......
......@@ -22,7 +22,6 @@ import java.util.logging.Logger;
import javax.inject.Inject;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_UNLOCK;
import static org.briarproject.briar.android.util.UiUtils.showAndroidHomeScreen;
import static org.briarproject.briar.api.android.AndroidNotificationManager.ACTION_LOCK;
@RequiresApi(21)
......@@ -61,7 +60,7 @@ public class UnlockActivity extends BaseActivity {
@Override
public void onBackPressed() {
showAndroidHomeScreen(this);
moveTaskToBack(true);
}
@Override
......
......@@ -41,7 +41,6 @@ import org.briarproject.briar.android.Localizer;
import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
import org.briarproject.briar.android.util.UiUtils;
import org.briarproject.briar.android.util.UserFeedback;
import org.briarproject.briar.api.android.LockManager;
import java.util.ArrayList;
import java.util.Collections;
......@@ -141,8 +140,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
@Inject
volatile EventBus eventBus;
@Inject
LockManager lockManager;
@Inject
AndroidExecutor androidExecutor;
......@@ -184,8 +181,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
"pref_key_notify_lock_screen");
notifySound = findPreference("pref_key_notify_sound");
setSettingsEnabled(false);
language.setOnPreferenceChangeListener(this);
theme.setOnPreferenceChangeListener((preference, newValue) -> {
if (getActivity() != null) {
......@@ -239,7 +234,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
testing.setVisible(false);
}
loadSettings();
}
@Override
......@@ -256,7 +250,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
public void onStart() {
super.onStart();
eventBus.addListener(this);
updateScreenLockSetting(settings != null);
setSettingsEnabled(false);
loadSettings();
}
@Override
......@@ -365,13 +360,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
enableBluetooth.setValue(Boolean.toString(btSetting));
torNetwork.setValue(Integer.toString(torNetworkSetting));
torBlocked.setChecked(torBlockedSetting);
displayScreenLockSetting();
if (SDK_INT >= 21) {
boolean screenLockable =
settings.getBoolean(PREF_SCREEN_LOCK, false);
screenLock.setChecked(
screenLockable && hasScreenLock(getActivity()));
}
if (SDK_INT < 26) {
notifyPrivateMessages.setChecked(settings.getBoolean(
PREF_NOTIFY_PRIVATE, true));
......@@ -428,10 +418,11 @@ public class SettingsFragment extends PreferenceFragmentCompat
// preferences not needed here, because handled by SharedPreferences:
// - pref_key_theme
// - pref_key_notify_sign_in
// preferences not needed here, because they have their own logic
// - pref_key_lock (screenLock -> displayScreenLockSetting())
enableBluetooth.setEnabled(enabled);
torNetwork.setEnabled(enabled);
torBlocked.setEnabled(enabled);
updateScreenLockSetting(enabled);
notifyPrivateMessages.setEnabled(enabled);
notifyGroupMessages.setEnabled(enabled);
notifyForumPosts.setEnabled(enabled);
......@@ -441,15 +432,20 @@ public class SettingsFragment extends PreferenceFragmentCompat
notifySound.setEnabled(enabled);
}
private void updateScreenLockSetting(boolean enabled) {
private void displayScreenLockSetting() {
if (SDK_INT < 21) {
screenLock.setVisible(false);
} else if (enabled && hasScreenLock(getActivity())) {
screenLock.setEnabled(true);
} else {
screenLock.setEnabled(false);
screenLock.setChecked(false);
screenLock.setSummary(getString(R.string.lock_disabled));
if (getActivity() != null && hasScreenLock(getActivity())) {
screenLock.setEnabled(true);
screenLock.setChecked(
settings.getBoolean(PREF_SCREEN_LOCK, false));
screenLock.setSummary(R.string.pref_lock_summary);
} else {
screenLock.setEnabled(false);
screenLock.setChecked(false);
screenLock.setSummary(R.string.pref_lock_disabled_summary);
}
}
}
......@@ -509,7 +505,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
boolean torBlockedSetting = (Boolean) newValue;
storeTorBlockedSetting(torBlockedSetting);
} else if (preference == screenLock) {
lockManager.updateLockableSetting((Boolean) newValue);
Settings s = new Settings();
s.putBoolean(PREF_SCREEN_LOCK, (Boolean) newValue);
storeSettings(s);
......
......@@ -50,8 +50,9 @@ public class SplashScreenActivity extends BaseActivity {
if (accountManager.hasDatabaseKey()) {
Intent i;
if (lockManager.isLocked().getValue()) {
// The database is already open, so start main activity which
// will open the activity to unlock, then brings main to front.
// The database needs to be opened for the app to be locked.
// Start main activity right away. It will open UnlockActivity.
// Otherwise, we would end up with two screen unlock inputs.
i = new Intent(this, NavDrawerActivity.class);
} else {
i = new Intent(this, OpenDatabaseActivity.class);
......
......@@ -37,6 +37,7 @@ import org.briarproject.briar.android.widget.LinkDialogFragment;
import javax.annotation.Nullable;
import static android.content.Context.KEYGUARD_SERVICE;
import static android.content.Context.POWER_SERVICE;
import static android.content.Intent.CATEGORY_DEFAULT;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
......@@ -232,19 +233,13 @@ public class UiUtils {
public static boolean hasScreenLock(Context ctx) {
if (SDK_INT < 21) return false;
KeyguardManager keyguardManager = (KeyguardManager) ctx
.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager keyguardManager =
(KeyguardManager) ctx.getSystemService(KEYGUARD_SERVICE);
if (keyguardManager == null) return false;
// check if there's a lock mechanism we can use, try to ignore SIM
// check if there's a lock mechanism we can use
// first one is true if SIM card is locked, so use second if available
return (SDK_INT < 23 && keyguardManager.isKeyguardSecure()) ||
(SDK_INT >= 23 && keyguardManager.isDeviceSecure());
}
public static void showAndroidHomeScreen(Context ctx) {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(i);
}
}
package org.briarproject.briar.api.android;
import android.arch.lifecycle.LiveData;
import android.support.annotation.UiThread;
public interface LockManager {
LiveData<Boolean> isLockable();
@UiThread
void recheckLockable();
void updateLockableSetting(boolean lockable);
LiveData<Boolean> isLocked();
void setLocked(boolean locked);
......
......@@ -133,7 +133,7 @@
<string name="security_settings_title">Seguridá</string>
<string name="panic_setting">Configuración del Botón d\'espantu</string>
<string name="panic_setting_title">Botón d\'espantu</string>
<string name="lock_setting_title">Colar</string>
<string name="panic_setting_signout_title">Colar</string>
<string name="uninstall_setting_title">Desinstalar Briar</string>
<!--Settings Notifications-->
<string name="notification_settings_title">Avisos</string>
......
......@@ -271,8 +271,8 @@
<string name="panic_app_setting_none">Няма</string>
<string name="dialog_title_connect_panic_app">Потвърждение на паник приложение</string>
<string name="dialog_message_connect_panic_app">Сигурни ли сте, че искате да позволите на %1$s да задейства унищожителни действия на паник бутон?</string>
<string name="lock_setting_title">Отписване</string>
<string name="lock_setting_summary">Отписване от Briar, ако паник бутонът е натиснат</string>
<string name="panic_setting_signout_title">Отписване</string>
<string name="panic_setting_signout_summary">Отписване от Briar, ако паник бутонът е натиснат</string>
<string name="purge_setting_title">Изтриване на профил</string>
<string name="purge_setting_summary">Изтриване на Briar профила, ако паник бутонът е натиснат. Внимание: Изтрива завинаги вашия профил, контакти и съобщения</string>
<string name="uninstall_setting_title">Деинсталиране на Briar</string>
......
......@@ -164,7 +164,7 @@
<string name="change_password">Cheñch ar ger-tremen</string>
<string name="confirm_new_password">Kadarnaat ar ger-tremen nevez</string>
<string name="panic_app_setting_none">Hini ebet</string>
<string name="lock_setting_title">Digevreañ</string>
<string name="panic_setting_signout_title">Digevreañ</string>
<!--Settings Notifications-->
<string name="notify_sound_setting_disabled">Hini ebet</string>
<!--Settings Feedback-->
......
......@@ -343,8 +343,8 @@
<string name="panic_app_setting_none">Cap</string>
<string name="dialog_title_connect_panic_app">Confirmeu l\'aplicació de pànic</string>
<string name="dialog_message_connect_panic_app">Segur que voleu permetre que %1$s desencadeni accions destructives a conseqüència del botó de pànic?</string>
<string name="lock_setting_title">Tanca la sessió</string>
<string name="lock_setting_summary">Tanca la sessió de Briar si es prem un botó de pànic</string>
<string name="panic_setting_signout_title">Tanca la sessió</string>
<string name="panic_setting_signout_summary">Tanca la sessió de Briar si es prem un botó de pànic</string>
<string name="purge_setting_title">Esborreu el compte</string>
<string name="purge_setting_summary">Suprimeix el compte de Briar si es prem el botó de pànic. Atenció: En aquest cas, s\'eliminarien permanentment les vostres identitats, contactes i missatges</string>
<string name="uninstall_setting_title">Desinstal·leu Briar</string>
......
......@@ -346,8 +346,8 @@
<string name="panic_app_setting_none">Žádný</string>
<string name="dialog_title_connect_panic_app">Potvrdit aplikaci Paniky</string>
<string name="dialog_message_connect_panic_app">Jste si jisti, že chcete povolit %1$s spustit akci zneškodnění pomocí tlačítka paniky?</string>
<string name="lock_setting_title">Odhlásit se</string>
<string name="lock_setting_summary">Odhlásit se z Briar, pokud je stisknuto tlačítko paniky</string>
<string name="panic_setting_signout_title">Odhlásit se</string>
<string name="panic_setting_signout_summary">Odhlásit se z Briar, pokud je stisknuto tlačítko paniky</string>
<string name="purge_setting_title">Odstranit účet</string>
<string name="purge_setting_summary">Vymazat váš Briar účet pokud je stlačeno tlačítko paniky. Upozornění: Toto trvale vymaže vaši identitu, kontakty a zprávy</string>
<string name="uninstall_setting_title">Odinstalovat Briar</string>
......
......@@ -333,8 +333,8 @@
<string name="panic_app_setting_none">Keine</string>
<string name="dialog_title_connect_panic_app">Bestätige Panik-App</string>
<string name="dialog_message_connect_panic_app">Bist du sicher, dass du %1$s erlauben willst, Panik-Button-Ereignisse auszulösen? Dies kann zum Löschen von Daten führen.</string>
<string name="lock_setting_title">Abmelden</string>
<string name="lock_setting_summary">Von Briar abmelden, wenn ein Panik-Button aktiviert wird</string>
<string name="panic_setting_signout_title">Abmelden</string>
<string name="panic_setting_signout_summary">Von Briar abmelden, wenn ein Panik-Button aktiviert wird</string>
<string name="purge_setting_title">Konto löschen</string>
<string name="purge_setting_summary">Briar-Konto löschen, wenn der Panik-Button gedrückt wird. Achtung: Es werden alle Identitäten, Kontakte und Nachrichten unwiderruflich gelöscht.</string>
<string name="uninstall_setting_title">Briar deinstallieren</string>
......
......@@ -327,8 +327,8 @@
<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 lance acciones destructivas de botón de pánico?</string>
<string name="lock_setting_title">Cerrar sesión</string>
<string name="lock_setting_summary">Cerrar la sesión de Briar si se pulsa un botón de pánico</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>
<string name="purge_setting_summary">Eliminar tu cuenta de Briar si se pulsa un botón de pánico. Advertencia: esto eliminará permanentemente tus identidades, contactos y mensajes</string>
<string name="uninstall_setting_title">Desinstalar Briar</string>
......
......@@ -343,8 +343,8 @@
<string name="panic_app_setting_none">Bat ere ez</string>
<string name="dialog_title_connect_panic_app">Berretsi larrialdi-aplikazioa</string>
<string name="dialog_message_connect_panic_app">Ziur %1$s baimendu nahi duzula larrialdi botoiaren ekintza suntsitzaileak burutzea?</string>
<string name="lock_setting_title">Amaitu saioa</string>
<string name="lock_setting_summary">Amaitu saioa larrialdi botoia zapaltzen bada</string>
<string name="panic_setting_signout_title">Amaitu saioa</string>
<string name="panic_setting_signout_summary">Amaitu saioa larrialdi botoia zapaltzen bada</string>
<string name="purge_setting_title">Ezabatu kontua</string>
<string name="purge_setting_summary">Ezabatu kontua Briar larrialdi botoia zapaltzen bada. Kontuz: Honek behin betiko ezabatuko ditu zure identitateak, kontaktuak eta mezuak</string>
<string name="uninstall_setting_title">Desinstalatu Briar</string>
......
......@@ -382,8 +382,8 @@
<string name="panic_app_setting_none">هیچکدام</string>
<string name="dialog_title_connect_panic_app">تایید برنامه هراس</string>
<string name="dialog_message_connect_panic_app">آیا مطمئن هستید که میخواهید به %1$s اجازه دهید تا باعث عملیات مخرب دکمه هراس بشود؟</string>
<string name="lock_setting_title">خروج</string>
<string name="lock_setting_summary">در صورت کلیک بر روی کلید هراس از برایر خارج شو</string>
<string name="panic_setting_signout_title">خروج</string>
<string name="panic_setting_signout_summary">در صورت کلیک بر روی کلید هراس از برایر خارج شو</string>
<string name="purge_setting_title">حذف حساب کاربری</string>
<string name="purge_setting_summary">پاک کردن حساب کاربری برایر شما در صورتی که دکمه هراس فشار داده شود. اخطار: این باعث پاک شدن دائمی تمام هویت ها، مخاطبان و پیام های شما خواهد شد</string>
<string name="uninstall_setting_title">پاک کردن برایر</string>
......
......@@ -343,8 +343,8 @@
<string name="panic_app_setting_none">Ei mitään</string>
<string name="dialog_title_connect_panic_app">Vahvista paniikkisovellus</string>
<string name="dialog_message_connect_panic_app">Oletko varma, että haluat myöntää ohjelmalle %1$s luvan laukaista tuhoa aiheuttavia paniikkinapin toimintoja?</string>
<string name="lock_setting_title">Kirjaudu ulos</string>
<string name="lock_setting_summary">Kirjaudu ulos Briarista jos paniikkinappia on painettu</string>
<string name="panic_setting_signout_title">Kirjaudu ulos</string>
<string name="panic_setting_signout_summary">Kirjaudu ulos Briarista jos paniikkinappia on painettu</string>
<string name="purge_setting_title">Poista tili</string>
<string name="purge_setting_summary">Poista Briar tilisi jos paniikkinappia on painettu. Varoitus: Tämä tulee pysyvästi poistamaan sinun tunnukset, yhteystiedot ja viestit</string>
<string name="uninstall_setting_title">Poista Briarin asennus</string>
......
......@@ -343,8 +343,8 @@
<string name="panic_app_setting_none">Aucune</string>
<string name="dialog_title_connect_panic_app">Confirmer l’application d’urgence</string>
<string name="dialog_message_connect_panic_app">Voulez-vous vraiment autoriser %1$s à déclencher les actions destructrices du bouton d’urgence ?</string>
<string name="lock_setting_title">Déconnexion</string>
<string name="lock_setting_summary">Se déconnecter de Briar lorsqu’on appuie sur un bouton d’urgence</string>
<string name="panic_setting_signout_title">Déconnexion</string>
<string name="panic_setting_signout_summary">Se déconnecter de Briar lorsqu’on appuie sur un bouton d’urgence</string>
<string name="purge_setting_title">Supprimer le compte</string>
<string name="purge_setting_summary">Supprimer votre compte Briar lorsqu’on appuie sur un bouton d’urgence. Attention : cela supprimera définitivement vos identités, contacts et messages</string>
<string name="uninstall_setting_title">Désinstaller Briar</string>
......
......@@ -341,8 +341,8 @@
<string name="panic_app_setting_none">Ningún</string>
<string name="dialog_title_connect_panic_app">Confirme a App do pánico</string>
<string name="dialog_message_connect_panic_app">Está segura de querer permitir a %1$s activar accións destrutivas do botón do pánico?</string>
<string name="lock_setting_title">Finalizar sesión</string>
<string name="lock_setting_summary">Desconecte de Briar si o botón do pánico se preme</string>
<string name="panic_setting_signout_title">Finalizar sesión</string>
<string name="panic_setting_signout_summary">Desconecte de Briar si o botón do pánico se preme</string>
<string name="purge_setting_title">Eliminar conta</string>
<string name="purge_setting_summary">Elimina a súa conta en Briar si se preme o botón do pánico. Coidado: Esto eliminará permanentemente as súas identidade, contactos e mensaxes</string>
<string name="uninstall_setting_title">Desinstalar Briar</string>
......
......@@ -239,7 +239,7 @@
<string name="security_settings_title">אבטחה</string>
<string name="choose_new_password">סיסמא חדשה</string>
<string name="panic_app_setting_none">כלום</string>
<string name="lock_setting_title">יציאה</string>
<string name="panic_setting_signout_title">יציאה</string>
<string name="purge_setting_title">מחק חשבון</string>
<!--Settings Notifications-->
<string name="notification_settings_title">הודעות מערכת</string>
......
......@@ -327,8 +327,8 @@
<string name="panic_app_setting_none">कुछ भी नहीं</string>
<string name="dialog_title_connect_panic_app">आतंक ऐप की पुष्टि करें</string>
<string name="dialog_message_connect_panic_app">क्या आप निश्चित हैं कि आप%1$s को विनाशकारी आतंक बटन क्रियाओं को ट्रिगर करने की अनुमति देना चाहते हैं?</string>
<string name="lock_setting_title">साइन आउट</string>
<string name="lock_setting_summary">यदि कोई आतंक बटन दबाया जाता है तो बियर से साइन आउट करें</string>
<string name="panic_setting_signout_title">साइन आउट</string>
<string name="panic_setting_signout_summary">यदि कोई आतंक बटन दबाया जाता है तो बियर से साइन आउट करें</string>
<string name="purge_setting_title">खाता हटा दो</string>
<string name="purge_setting_summary">यदि आपका आतंक बटन दबाया गया हो तो अपने ब्रियर खाते को हटा दें। सावधानी: यह आपकी पहचान, संपर्क और संदेश को स्थायी रूप से हटा देगा</string>
<string name="uninstall_setting_title">बरिअर की स्थापना रद्द करें</string>
......
......@@ -343,8 +343,8 @@
<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="lock_setting_title">Esci</string>
<string name="lock_setting_summary">Uscire da Briar se viene premuto un pulsante di panico</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>
<string name="purge_setting_summary">Cancella il tuo account Briar se un panic button è premuto. Attenzione: ciò cancellerà permanentemente le tue identità, contatti e messaggi</string>
<string name="uninstall_setting_title">Disinstalla Briar</string>
......
......@@ -114,7 +114,7 @@
<string name="change_password">パスワードの変更</string>
<string name="confirm_new_password">新しいパスワードの確認</string>
<string name="panic_app_setting_none">なし</string>
<string name="lock_setting_title">サインアウト</string>
<string name="panic_setting_signout_title">サインアウト</string>
<string name="purge_setting_title">アカウントを削除</string>
<!--Settings Notifications-->
<string name="notification_settings_title">通知</string>
......
......@@ -296,8 +296,8 @@
<string name="panic_app_setting_none">Inget</string>
<string name="dialog_title_connect_panic_app">Bekreft panikk-knapp-program</string>
<string name="dialog_message_connect_panic_app">Er du sikker på at du vil tillate %1$s å utløse destruktive panikk-knapp-handlinger?</string>
<string name="lock_setting_title">Logg ut</string>
<string name="lock_setting_summary">Logg ut av Briar hvis panikk-knappen trykkes</string>
<string name="panic_setting_signout_title">Logg ut</string>
<string name="panic_setting_signout_summary">Logg ut av Briar hvis panikk-knappen trykkes</string>
<string name="purge_setting_title">Slett konto</string>
<string name="purge_setting_summary">Slett Briar-kontoen din hvis panikk-knappen trykkes. Advarsel: Dette vil slette dine identiteter, kontakter og meldinger for godt.</string>
<string name="uninstall_setting_title">Avinstaller Briar</string>
......
......@@ -343,8 +343,8 @@
<string name="panic_app_setting_none">Geen</string>
<string name="dialog_title_connect_panic_app">Bevestig paniekapp</string>
<string name="dialog_message_connect_panic_app">Weet je zeker dat je wil toestaan dat %1$s destructieve paniekknopacties mag veroorzaken?</string>
<string name="lock_setting_title">Log uit</string>
<string name="lock_setting_summary">Log uit op Briar als de paniekknop wordt ingedrukt.</string>
<string name="panic_setting_signout_title">Log uit</string>
<string name="panic_setting_signout_summary">Log uit op Briar als de paniekknop wordt ingedrukt.</string>
<string name="purge_setting_title">Verwijder account</string>
<string name="purge_setting_summary">Verwijder je Briar-account als een paniekknop wordt ingedrukt. Let op: Dit zal permanent je identiteit, contacten en berichten verwijderen.</string>
<string name="uninstall_setting_title">Deïnstalleer Briar</string>
......
......@@ -309,8 +309,8 @@ Volètz suprimir vòstre compte e ne crear un nòu ?\n
<string name="panic_app_setting_none">Cap</string>
<string name="dialog_title_connect_panic_app">Confirmar l’aplicacion Urgéncia</string>
<string name="dialog_message_connect_panic_app">Sètz segur de voler autorizar %1$s a aviar las accions de destruccion del boton Urgéncia ?</string>
<string name="lock_setting_title">Se desconnectar</string>
<string name="lock_setting_summary">Se desconnectar de Briar en apiejant lo boton Urgéncia ?</string>
<string name="panic_setting_signout_title">Se desconnectar</string>
<string name="panic_setting_signout_summary">Se desconnectar de Briar en apiejant lo boton Urgéncia ?</string>
<string name="purge_setting_title">Suprimir lo compte</string>
<string name="purge_setting_summary">Suprimir vòstre compte en apiejant lo boton Urgéncia. Mèfi, aquò escafarà per totjorn vòstra identitat, vòstres contactes e messatges.</string>
<string name="uninstall_setting_title">Desinstallar Briar</string>
......
......@@ -361,8 +361,8 @@
<string name="panic_app_setting_none">Brak</string>
<string name="dialog_title_connect_panic_app">Potwierdź Awaryjną Aplikację</string>
<string name="dialog_message_connect_panic_app">Czy na pewno chcesz pozwolić %1$s aby działała jako przycisk wyjścia awaryjnego?</string>
<string name="lock_setting_title">Wyloguj się</string>
<string name="lock_setting_summary">Wyloguj się z Briar jeśli przycisk zostanie wciśnięty</string>
<string name="panic_setting_signout_title">Wyloguj się</string>
<string name="panic_setting_signout_summary">Wyloguj się z Briar jeśli przycisk zostanie wciśnięty</string>
<string name="purge_setting_title">Skasuj Konto</string>
<string name="purge_setting_summary">Skasuj Twoje konto Briar jeśli przycisk wyjścia awaryjnego zostanie wciśnięty. Ostrzeżenie: Ta akcja usunie permanentnie Twoje konto, kontakty i wiadomości</string>
<string name="uninstall_setting_title">Odinstaluj Briar</string>
......
......@@ -332,8 +332,8 @@
<string name="panic_app_setting_none">Nenhum</string>
<string name="dialog_title_connect_panic_app">Confirmar aplicativo de pânico</string>
<string name="dialog_message_connect_panic_app">Você tem certeza que quer permitir que %1$s ative ações destrutivas do botão de pânico?</string>
<string name="lock_setting_title">Desconectar</string>
<string name="lock_setting_summary">Desconectar do Briar se o botão de pânico for apertado</string>
<string name="panic_setting_signout_title">Desconectar</string>
<string name="panic_setting_signout_summary">Desconectar do Briar se o botão de pânico for apertado</string>
<string name="purge_setting_title">Apagar conta</string>
<string name="purge_setting_summary">Apagar sua conta do Briar se o botão de pânico for apertado. Atenção: isso irá apagar permanentemente suas identidades, contatos e mensagens</string>
<string name="uninstall_setting_title">Desinstalar o Briar</string>
......
......@@ -354,8 +354,8 @@
<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="lock_setting_title">Ieșire</string>
<string name="lock_setting_summary">Ieși din Briar dacă un buton de panică este apăsat</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>
<string name="purge_setting_summary">Ștergeți contul Briar dacă este apăsat buton de panică. Atenție: aceasta va șterge definitiv identitatea, contactele și mesajele dvs.</string>
<string name="uninstall_setting_title">Dezinstalare Briar</string>
......
......@@ -363,8 +363,8 @@
<string name="panic_app_setting_none">Нет</string>
<string name="dialog_title_connect_panic_app">Подтвердить приложение тревожной кнопки</string>
<string name="dialog_message_connect_panic_app">Вы уверены, что хотите разрешить %1$s запускать действия тревожной кнопки?</string>
<string name="lock_setting_title">Выйти</string>
<string name="lock_setting_summary">Выйти из Briar, если нажата тревожная кнопка</string>
<string name="panic_setting_signout_title">Выйти</string>
<string name="panic_setting_signout_summary">Выйти из Briar, если нажата тревожная кнопка</string>
<string name="purge_setting_title">Удалить аккаунт</string>
<string name="purge_setting_summary">Удалить вашу учетную запись Briar при нажатии тревожной кнопки. Внимание: это необратимо удалит ваши идентификаторы, контакты и сообщения</string>
<string name="uninstall_setting_title">Удалить Briar</string>
......
......@@ -343,8 +343,8 @@
<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="lock_setting_title">Dilni</string>
<string name="lock_setting_summary">Dil nga Briar-i nëse shtypet një buton paniku</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>
<string name="purge_setting_summary">Fshijeni llogarinë tuaj Briar, nëse shtypet një buton paniku. Kujdes: Kjo do të shkaktojë fshirjen e identiteteve, kontakteve dhe mesazheve tuaj</string>
<string name="u