aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-05-09 20:07:02 +0800
committerGitHub <noreply@github.com>2019-05-09 20:07:02 +0800
commita5a19290a876faca91c6c865c50350689f72c080 (patch)
treedc9999e87af09f629ec758bd721cbb01a21dd660
parente7a499f6314f8d6345b19c3e221f3cd9cd176d4f (diff)
parente0bea89b0897d741634098c33bf2aedc5e5fc88e (diff)
downloadfrost-a5a19290a876faca91c6c865c50350689f72c080.tar.gz
frost-a5a19290a876faca91c6c865c50350689f72c080.tar.bz2
frost-a5a19290a876faca91c6c865c50350689f72c080.zip
Merge pull request #1405 from AllanWang/feature/lockscreen
Feature/lockscreen
-rw-r--r--app/build.gradle2
-rw-r--r--app/src/main/AndroidManifest.xml3
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/StartActivity.kt3
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt6
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt3
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/FrostParser.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/settings/Security.kt50
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/utils/BiometricUtils.kt110
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt2
-rw-r--r--app/src/main/res/values-cs-rCZ/strings.xml3
-rw-r--r--app/src/main/res/values-cs-rCZ/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-da-rDK/strings.xml3
-rw-r--r--app/src/main/res/values-da-rDK/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-de-rDE/strings.xml3
-rw-r--r--app/src/main/res/values-de-rDE/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-es-rES/strings.xml3
-rw-r--r--app/src/main/res/values-es-rES/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-fr-rFR/strings.xml3
-rw-r--r--app/src/main/res/values-fr-rFR/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-gl-rES/strings.xml3
-rw-r--r--app/src/main/res/values-gl-rES/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-hu-rHU/strings.xml3
-rw-r--r--app/src/main/res/values-hu-rHU/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-in-rID/strings.xml3
-rw-r--r--app/src/main/res/values-in-rID/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-it-rIT/strings.xml3
-rw-r--r--app/src/main/res/values-it-rIT/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-ko-rKR/strings.xml3
-rw-r--r--app/src/main/res/values-ko-rKR/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-nl-rNL/strings.xml3
-rw-r--r--app/src/main/res/values-nl-rNL/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-no-rNO/strings.xml2
-rw-r--r--app/src/main/res/values-no-rNO/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-pl-rPL/strings.xml3
-rw-r--r--app/src/main/res/values-pl-rPL/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-pt-rBR/strings.xml3
-rw-r--r--app/src/main/res/values-pt-rBR/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-pt-rPT/strings.xml3
-rw-r--r--app/src/main/res/values-pt-rPT/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-ro-rRO/strings.xml3
-rw-r--r--app/src/main/res/values-ro-rRO/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-ru-rRU/strings.xml3
-rw-r--r--app/src/main/res/values-ru-rRU/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-sr-rSP/strings.xml3
-rw-r--r--app/src/main/res/values-sr-rSP/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-sv-rSE/strings.xml3
-rw-r--r--app/src/main/res/values-sv-rSE/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-th-rTH/strings.xml6
-rw-r--r--app/src/main/res/values-th-rTH/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-tl-rPH/strings.xml3
-rw-r--r--app/src/main/res/values-tl-rPH/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-tr-rTR/strings.xml3
-rw-r--r--app/src/main/res/values-tr-rTR/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-uk-rUA/strings.xml3
-rw-r--r--app/src/main/res/values-uk-rUA/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-vi-rVN/strings.xml3
-rw-r--r--app/src/main/res/values-vi-rVN/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-zh-rCN/strings.xml3
-rw-r--r--app/src/main/res/values-zh-rCN/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values-zh-rTW/strings.xml3
-rw-r--r--app/src/main/res/values-zh-rTW/strings_pref_experimental.xml1
-rw-r--r--app/src/main/res/values/strings.xml4
-rw-r--r--app/src/main/res/values/strings_pref_experimental.xml2
-rw-r--r--app/src/main/res/values/strings_pref_security.xml6
-rw-r--r--app/src/main/res/values/strings_preferences.xml3
-rw-r--r--app/src/main/res/xml/frost_changelog.xml4
-rw-r--r--docs/Changelog.md4
-rw-r--r--gradle.properties2
70 files changed, 280 insertions, 36 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 472669cc..4d1ec15e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -206,6 +206,8 @@ dependencies {
implementation "androidx.core:core-ktx:${KTX}"
+ implementation "androidx.biometric:biometric:${ANDX_BIOMETRIC}"
+
implementation "org.koin:koin-android:${KOIN}"
testImplementation "org.koin:koin-test:${KOIN}"
androidTestImplementation "org.koin:koin-test:${KOIN}"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1ca91d62..bd8776d1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,7 +12,8 @@
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <!--<uses-permission android:name="android.permission.USE_FINGERPRINT" />-->
+ <uses-permission android:name="android.permission.USE_FINGERPRINT" />
+ <uses-permission android:name="android.permission.USE_BIOMETRIC" />
<application
android:name=".FrostApp"
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/StartActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/StartActivity.kt
index 18ae4b0b..cf8acdd3 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/StartActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/StartActivity.kt
@@ -42,6 +42,7 @@ import com.pitchedapps.frost.db.save
import com.pitchedapps.frost.db.saveTabs
import com.pitchedapps.frost.db.selectAll
import com.pitchedapps.frost.facebook.FbCookie
+import com.pitchedapps.frost.utils.BiometricUtils
import com.pitchedapps.frost.utils.EXTRA_COOKIES
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.utils.Prefs
@@ -79,6 +80,7 @@ class StartActivity : KauBaseActivity() {
}
launch {
+ val authDefer = BiometricUtils.authenticate(this@StartActivity)
try {
migrate()
FbCookie.switchBackUser()
@@ -86,6 +88,7 @@ class StartActivity : KauBaseActivity() {
L.i { "Cookies loaded at time ${System.currentTimeMillis()}" }
L._d { "Cookies: ${cookies.joinToString("\t", transform = CookieEntity::toSensitiveString)}" }
loadAssets()
+ authDefer.await()
when {
cookies.isEmpty() -> launchNewTask<LoginActivity>()
// Has cookies but no selected account
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt
index c3089c7a..bc20aa2d 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt
@@ -45,6 +45,7 @@ import com.pitchedapps.frost.settings.getDebugPrefs
import com.pitchedapps.frost.settings.getExperimentalPrefs
import com.pitchedapps.frost.settings.getFeedPrefs
import com.pitchedapps.frost.settings.getNotificationPrefs
+import com.pitchedapps.frost.settings.getSecurityPrefs
import com.pitchedapps.frost.settings.sendDebug
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.utils.Prefs
@@ -146,6 +147,11 @@ class SettingsActivity : KPrefActivity() {
iicon = GoogleMaterial.Icon.gmd_notifications
}
+ subItems(R.string.security, getSecurityPrefs()) {
+ descRes = R.string.security_desc
+ iicon = GoogleMaterial.Icon.gmd_lock
+ }
+
// subItems(R.string.network, getNetworkPrefs()) {
// descRes = R.string.network_desc
// iicon = GoogleMaterial.Icon.gmd_network_cell
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
index f3226e2f..ec4ff9dd 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
@@ -64,6 +64,7 @@ import com.pitchedapps.frost.kotlin.subscribeDuringJob
import com.pitchedapps.frost.services.FrostRunnable
import com.pitchedapps.frost.utils.ARG_URL
import com.pitchedapps.frost.utils.ARG_USER_ID
+import com.pitchedapps.frost.utils.BiometricUtils
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.utils.Prefs
import com.pitchedapps.frost.utils.Showcase
@@ -214,8 +215,10 @@ open class WebOverlayActivityBase(private val forceDesktopAgent: Boolean) : Base
userAgentString = USER_AGENT_DESKTOP
Prefs.prevId = Prefs.userId
launch {
+ val authDefer = BiometricUtils.authenticate(this@WebOverlayActivityBase)
if (userId != Prefs.userId)
FbCookie.switchUser(userId)
+ authDefer.await()
reloadBase(true)
if (Showcase.firstWebOverlay) {
coordinator.frostSnackbar(R.string.web_overlay_swipe_hint) {
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/FrostParser.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/FrostParser.kt
index 24c39e28..6af21259 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/FrostParser.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/FrostParser.kt
@@ -76,7 +76,7 @@ const val FALLBACK_TIME_MOD = 1000000
data class FrostLink(val text: String, val href: String)
-data class ParseResponse<out T: ParseData>(val cookie: String, val data: T) {
+data class ParseResponse<out T : ParseData>(val cookie: String, val data: T) {
override fun toString() = "ParseResponse\ncookie: $cookie\ndata:\n$data"
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt
index e0ae6de5..1ee06464 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt
@@ -52,7 +52,7 @@ import java.io.File
*/
fun SettingsActivity.getDebugPrefs(): KPrefAdapterBuilder.() -> Unit = {
- plainText(R.string.experimental_disclaimer) {
+ plainText(R.string.disclaimer) {
descRes = R.string.debug_disclaimer_info
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt
index e0d314a8..41a60594 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Experimental.kt
@@ -30,7 +30,7 @@ import com.pitchedapps.frost.utils.Showcase
*/
fun SettingsActivity.getExperimentalPrefs(): KPrefAdapterBuilder.() -> Unit = {
- plainText(R.string.experimental_disclaimer) {
+ plainText(R.string.disclaimer) {
descRes = R.string.experimental_disclaimer_info
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Security.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Security.kt
new file mode 100644
index 00000000..754e19de
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Security.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Allan Wang
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.pitchedapps.frost.settings
+
+import ca.allanwang.kau.kpref.activity.KPrefAdapterBuilder
+import com.pitchedapps.frost.R
+import com.pitchedapps.frost.activities.SettingsActivity
+import com.pitchedapps.frost.utils.BiometricUtils
+import com.pitchedapps.frost.utils.Prefs
+import kotlinx.coroutines.launch
+
+/**
+ * Created by Allan Wang on 20179-05-01.
+ */
+fun SettingsActivity.getSecurityPrefs(): KPrefAdapterBuilder.() -> Unit = {
+
+ plainText(R.string.disclaimer) {
+ descRes = R.string.security_disclaimer_info
+ }
+
+ checkbox(R.string.enable_biometrics, Prefs::biometricsEnabled, {
+ launch {
+ /*
+ * For security, we should request authentication when:
+ * - enabling to ensure that it is supported
+ * - disabling to ensure that it is permitted
+ */
+ BiometricUtils.authenticate(this@getSecurityPrefs, force = true).await()
+ Prefs.biometricsEnabled = it
+ reloadByTitle(R.string.enable_biometrics)
+ }
+ }) {
+ descRes = R.string.enable_biometrics_desc
+ enabler = { BiometricUtils.isSupported(this@getSecurityPrefs) }
+ }
+}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/BiometricUtils.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/BiometricUtils.kt
new file mode 100644
index 00000000..db901073
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/BiometricUtils.kt
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2019 Allan Wang
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.pitchedapps.frost.utils
+
+import android.content.Context
+import android.hardware.fingerprint.FingerprintManager
+import android.os.Build
+import androidx.biometric.BiometricPrompt
+import androidx.fragment.app.FragmentActivity
+import ca.allanwang.kau.utils.string
+import com.pitchedapps.frost.R
+import kotlinx.coroutines.CompletableDeferred
+import java.util.concurrent.Executor
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+typealias BiometricDeferred = CompletableDeferred<BiometricPrompt.CryptoObject?>
+
+/**
+ * Container for [BiometricPrompt]
+ * Inspired by coroutine's CommonPool
+ */
+object BiometricUtils {
+
+ private val executor: Executor
+ get() = pool ?: getOrCreatePoolSync()
+
+ @Volatile
+ private var pool: ExecutorService? = null
+
+ private var lastUnlockTime = -1L
+
+ private const val UNLOCK_TIME_INTERVAL = 15 * 60 * 1000
+
+ /**
+ * Checks if biometric authentication is possible
+ * Currently, this means checking for enrolled fingerprints
+ */
+ @Suppress("DEPRECATION")
+ fun isSupported(context: Context): Boolean {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false
+ val fingerprintManager = context.getSystemService(FingerprintManager::class.java) ?: return false
+ return fingerprintManager.isHardwareDetected && fingerprintManager.hasEnrolledFingerprints()
+ }
+
+ private fun getOrCreatePoolSync(): Executor =
+ pool ?: Executors.newSingleThreadExecutor().also { pool = it }
+
+ private fun shouldPrompt(context: Context): Boolean {
+ return Prefs.biometricsEnabled && System.currentTimeMillis() - lastUnlockTime > UNLOCK_TIME_INTERVAL
+ }
+
+ fun authenticate(activity: FragmentActivity, force: Boolean = false): BiometricDeferred {
+ val deferred: BiometricDeferred = CompletableDeferred()
+ if (!force && !shouldPrompt(activity)) {
+ deferred.complete(null)
+ return deferred
+ }
+ val info = BiometricPrompt.PromptInfo.Builder()
+ .setTitle(activity.string(R.string.biometrics_prompt_title))
+ .setNegativeButtonText(activity.string(R.string.kau_cancel))
+ .build()
+ BiometricPrompt(activity, executor, Callback(activity, deferred)).authenticate(info)
+ return deferred
+ }
+
+ private class Callback(val activity: FragmentActivity, val deferred: BiometricDeferred) :
+ BiometricPrompt.AuthenticationCallback() {
+ override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
+ deferred.cancel()
+ activity.finish()
+ }
+
+ override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
+ lastUnlockTime = System.currentTimeMillis()
+ deferred.complete(result.cryptoObject)
+ }
+
+ override fun onAuthenticationFailed() {
+ deferred.cancel()
+ activity.finish()
+ }
+ }
+
+ /**
+ * For completeness we provide a shutdown function.
+ * In practice, we initialize the executor only when it is first used,
+ * and keep it alive throughout the app lifecycle, as it will be used an arbitrary number of times,
+ * with unknown frequency
+ */
+ @Synchronized
+ fun shutdown() {
+ pool?.shutdown()
+ pool = null
+ }
+}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt
index 391d422a..7656a081 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt
@@ -156,6 +156,8 @@ object Prefs : KPref() {
var analytics: Boolean by kpref("analytics", true)
+ var biometricsEnabled: Boolean by kpref("biometrics_enabled", false)
+
var overlayEnabled: Boolean by kpref("overlay_enabled", true)
var overlayFullScreenSwipe: Boolean by kpref("overlay_full_screen_swipe", true)
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml
index 357c7fd7..8ba1757d 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/app/src/main/res/values-cs-rCZ/strings.xml
@@ -54,4 +54,7 @@ plně funkční náhrada za oficiální aplikaci Facebooku, vytvořena od nuly a
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Upozornění</string>
+
</resources>
diff --git a/app/src/main/res/values-cs-rCZ/strings_pref_experimental.xml b/app/src/main/res/values-cs-rCZ/strings_pref_experimental.xml
index 10b86893..350e3676 100644
--- a/app/src/main/res/values-cs-rCZ/strings_pref_experimental.xml
+++ b/app/src/main/res/values-cs-rCZ/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Upozornění</string>
<string name="experimental_disclaimer_info">Experimentální nastavení mohou způsobovat problémy a být bez varování odstraněna. Povolte je jen na vlastní nebezpečí a dejte vědět vývojářům jak fungují.</string>
<string name="experimental_by_default">Povolit experimentální nastavení ve výchozím režimu</string>
<string name="experimental_by_default_desc">Chcete pomoct vývojářům s laděním? Povolit všechna, i budoucí experimentální nastavení.</string>
diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml
index fc7a0f44..eb4a8e2f 100644
--- a/app/src/main/res/values-da-rDK/strings.xml
+++ b/app/src/main/res/values-da-rDK/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Ansvarsfraskrivelse</string>
+
</resources>
diff --git a/app/src/main/res/values-da-rDK/strings_pref_experimental.xml b/app/src/main/res/values-da-rDK/strings_pref_experimental.xml
index b678c8ae..406d0d56 100644
--- a/app/src/main/res/values-da-rDK/strings_pref_experimental.xml
+++ b/app/src/main/res/values-da-rDK/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Ansvarsfraskrivelse</string>
<string name="experimental_disclaimer_info">Eksperimentelle funktioner kan være ustabile og bliver muligvis aldrig sat i produktion. Brug foregår på eget ansvar, send feedback og deaktivér dem endelig, hvis de ikke fungerer godt.</string>
<string name="experimental_by_default">Eksperimentel som standard</string>
<string name="experimental_by_default_desc">Føler du dig dristig eller vil du bare gerne hjælpe med fejlfinding? Aktivér denne for automatisk at bruge alle fremtidige eksperimentelle funktioner som standard.</string>
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index 84b9ae8d..9aca3085 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Haftungsausschluss</string>
+
</resources>
diff --git a/app/src/main/res/values-de-rDE/strings_pref_experimental.xml b/app/src/main/res/values-de-rDE/strings_pref_experimental.xml
index 01ff2c6a..a432f793 100644
--- a/app/src/main/res/values-de-rDE/strings_pref_experimental.xml
+++ b/app/src/main/res/values-de-rDE/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Haftungsausschluss</string>
<string name="experimental_disclaimer_info">Experimentelle Funktionen sind möglicherweise instabil und schaffen es eventuell nie in die App. Auf eigenes Risiko verwenden! Senden Sie Ihr Feedback und zögern Sie nicht, diese zu deaktivieren, wenn sie nicht gut funktionieren.</string>
<string name="experimental_by_default">Standartmäßig Experimentell</string>
<string name="experimental_by_default_desc">Sie fühlen sich mutig oder wollen einfach helfen bei der Fehlersuche? Beim Aktivieren dieser Option werden zukünftige, experimentelle Funktionen standardmäßig eingeschaltet.</string>
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 200b923b..049c8da2 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -56,4 +56,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Atención</string>
+
</resources>
diff --git a/app/src/main/res/values-es-rES/strings_pref_experimental.xml b/app/src/main/res/values-es-rES/strings_pref_experimental.xml
index 4b5acbb7..a653b081 100644
--- a/app/src/main/res/values-es-rES/strings_pref_experimental.xml
+++ b/app/src/main/res/values-es-rES/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Atención</string>
<string name="experimental_disclaimer_info">Las características experimentales pueden ser inestables y nunca entrar en vigencia. Úsalas bajo tu propio riesgo. Envía un informe y no dudes en desactivarlas si no funcionan correctamente.</string>
<string name="experimental_by_default">Experimental por Defecto</string>
<string name="experimental_by_default_desc">¿Notas algún error o deseas ayudar a depurar? Las futuras funciones experimentales se habilitarán por defecto.</string>
diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml
index b0e179e9..7f9b4233 100644
--- a/app/src/main/res/values-fr-rFR/strings.xml
+++ b/app/src/main/res/values-fr-rFR/strings.xml
@@ -57,4 +57,7 @@
The first element is the day, and the second element is the time
-->
<string name="time_template">%1s à %2s</string>
+
+ <string name="disclaimer">Clause de non-responsabilité</string>
+
</resources>
diff --git a/app/src/main/res/values-fr-rFR/strings_pref_experimental.xml b/app/src/main/res/values-fr-rFR/strings_pref_experimental.xml
index 112bb977..ae9b4388 100644
--- a/app/src/main/res/values-fr-rFR/strings_pref_experimental.xml
+++ b/app/src/main/res/values-fr-rFR/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Clause de non-responsabilité</string>
<string name="experimental_disclaimer_info">Les fonctionnalités expérimentales peuvent être instables et peuvent ne jamais se rendre à la production. Utiliser à vos risques et périls, envoyer vos commentaires et n’hésitez pas à les désactiver si elles ne fonctionnent pas bien.</string>
<string name="experimental_by_default">Expérimentale par défaut</string>
<string name="experimental_by_default_desc">Vous vous sentez risqué ou vous souhaitez simplement aider avec le débogage? Cocher ceci permettra aux futures fonctions expérimentales d\'être activées par défaut.</string>
diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml
index 48547a6c..20055016 100644
--- a/app/src/main/res/values-gl-rES/strings.xml
+++ b/app/src/main/res/values-gl-rES/strings.xml
@@ -56,4 +56,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Aviso legal</string>
+
</resources>
diff --git a/app/src/main/res/values-gl-rES/strings_pref_experimental.xml b/app/src/main/res/values-gl-rES/strings_pref_experimental.xml
index 4fd3b023..7d6766ab 100644
--- a/app/src/main/res/values-gl-rES/strings_pref_experimental.xml
+++ b/app/src/main/res/values-gl-rES/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Aviso legal</string>
<string name="experimental_disclaimer_info">As funcionalidades en proba ou experimentais poden resultar inestables e mesmo poden non funcionar. Utilízaas baixo a túa responsabilidade, envíanos comentarios acerca delas e sempre poderás deshabilitalas se non funcionan ben.</string>
<string name="experimental_by_default">Experimentar predefinido</string>
<string name="experimental_by_default_desc">Gústache o risco ou simplemente é que queres axudar coa depuración? Ao marcares esta opción, as funcionalidades experimentais activaranse por defecto.</string>
diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml
index 6b62f285..5190772f 100644
--- a/app/src/main/res/values-hu-rHU/strings.xml
+++ b/app/src/main/res/values-hu-rHU/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Nyilatkozat</string>
+
</resources>
diff --git a/app/src/main/res/values-hu-rHU/strings_pref_experimental.xml b/app/src/main/res/values-hu-rHU/strings_pref_experimental.xml
index 84cdb78e..b64f0de6 100644
--- a/app/src/main/res/values-hu-rHU/strings_pref_experimental.xml
+++ b/app/src/main/res/values-hu-rHU/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Nyilatkozat</string>
<string name="experimental_disclaimer_info">A kísérleti funkciók instabilak lehetnek, és talán sosem kerülnek forgalomba. Használd saját felelősségre, küldj visszajelzést, és nyugodtan tiltsd le őket, ha nem működnek jól.</string>
<string name="experimental_by_default">Kísérletek alapértelmezetten</string>
<string name="experimental_by_default_desc">Szereted a kockázatot, vagy csak segítenél a hibák elhárításában? Ezt bekapcsolva a jövőbeli kísérleti funkciók is engedélyezve lesznek.</string>
diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml
index 73c6c61d..d96fac68 100644
--- a/app/src/main/res/values-in-rID/strings.xml
+++ b/app/src/main/res/values-in-rID/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Penolakan</string>
+
</resources>
diff --git a/app/src/main/res/values-in-rID/strings_pref_experimental.xml b/app/src/main/res/values-in-rID/strings_pref_experimental.xml
index 4b429692..4071d963 100644
--- a/app/src/main/res/values-in-rID/strings_pref_experimental.xml
+++ b/app/src/main/res/values-in-rID/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Penolakan</string>
<string name="experimental_disclaimer_info">Fitur eksperimental mungkin tidak stabil dan mungkin tidak pernah sampai ke produksi. Gunakan dengan resiko Anda sendiri, kirim umpan balik, dan jangan ragu untuk menonaktifkan jika tidak bekerja dengan baik.</string>
<string name="experimental_by_default">Eksperimental secara standar</string>
<string name="experimental_by_default_desc">Merasa berisiko atau hanya ingin membantu kesalahan? Memeriksa ini akan mengaktifkan fungsi eksperimental masa depan menjadi standar.</string>
diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml
index be8c04f4..0f801e41 100644
--- a/app/src/main/res/values-it-rIT/strings.xml
+++ b/app/src/main/res/values-it-rIT/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Disconoscimento</string>
+
</resources>
diff --git a/app/src/main/res/values-it-rIT/strings_pref_experimental.xml b/app/src/main/res/values-it-rIT/strings_pref_experimental.xml
index 46aa21e0..9492ca2b 100644
--- a/app/src/main/res/values-it-rIT/strings_pref_experimental.xml
+++ b/app/src/main/res/values-it-rIT/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Disclaimer</string>
<string name="experimental_disclaimer_info">Le funzioni sperimentali potrebbero essere instabili e potrebbero non arrivare mai al rilascio. Usale a tuo rischio e pericolo, manda il tuo feedback e sentiti libero di disabilitarle se non funzionano bene.</string>
<string name="experimental_by_default">Funzioni Sperimentali di Default</string>
<string name="experimental_by_default_desc">Ti senti temerario o vuoi solo aiutarci con il debugging? Attivandolo abiliterai le funzioni sperimentali di default.</string>
diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml
index ef490091..da997723 100644
--- a/app/src/main/res/values-ko-rKR/strings.xml
+++ b/app/src/main/res/values-ko-rKR/strings.xml
@@ -50,4 +50,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">경고</string>
+
</resources>
diff --git a/app/src/main/res/values-ko-rKR/strings_pref_experimental.xml b/app/src/main/res/values-ko-rKR/strings_pref_experimental.xml
index b3b57eb6..22c31278 100644
--- a/app/src/main/res/values-ko-rKR/strings_pref_experimental.xml
+++ b/app/src/main/res/values-ko-rKR/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">경고</string>
<string name="experimental_disclaimer_info">실험적 기능은 불안정하거나 출시로 이어지지 않을 수 있습니다. 이를 사용함으로써 발생하는 일의 책임은 당신에게 있으며, 피드백을 보내시거나 제대로 작동하지 않으면 비활성화 하시기 바랍니다.</string>
<string name="experimental_by_default">실험적 기능 항상 사용</string>
<string name="experimental_by_default_desc">위험을 감수하거나 디버그에 도움을 주고 싶나요? 이를 활성화하면 앞으로도 기본적으로 실험적 기능이 활성화 됩니다.</string>
diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml
index 0c506137..aa679009 100644
--- a/app/src/main/res/values-nl-rNL/strings.xml
+++ b/app/src/main/res/values-nl-rNL/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Ontkenning</string>
+
</resources>
diff --git a/app/src/main/res/values-nl-rNL/strings_pref_experimental.xml b/app/src/main/res/values-nl-rNL/strings_pref_experimental.xml
index d48c488d..53b71632 100644
--- a/app/src/main/res/values-nl-rNL/strings_pref_experimental.xml
+++ b/app/src/main/res/values-nl-rNL/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Disclaimer</string>
<string name="experimental_disclaimer_info">Experimentele functies kunnen instabiliteit veroorzaken en zullen mogelijk nooit volledig worden geïmplementeerd. Gebruik de functies op eigen verantwoordelijkheid, stuur feedback en wees vrij om ze uit te schakelen bij problemen.</string>
<string name="experimental_by_default">Experimentele functies standaard inschakelen</string>
<string name="experimental_by_default_desc">Wees een waaghals en activeer nieuwe experimentele functies automatisch.</string>
diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml
index 770ee6d8..49e7efeb 100644
--- a/app/src/main/res/values-no-rNO/strings.xml
+++ b/app/src/main/res/values-no-rNO/strings.xml
@@ -52,4 +52,6 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Ansvarsfraskrivelse</string>
</resources>
diff --git a/app/src/main/res/values-no-rNO/strings_pref_experimental.xml b/app/src/main/res/values-no-rNO/strings_pref_experimental.xml
index 9710f4e6..e1758cd0 100644
--- a/app/src/main/res/values-no-rNO/strings_pref_experimental.xml
+++ b/app/src/main/res/values-no-rNO/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Ansvarsfraskrivelse</string>
<string name="experimental_disclaimer_info">Eksperimentelle funksjonene kan være ustabile. Bruk på eget ansvar og du må gjerne deaktivere dem om de ikke fungerer.</string>
<string name="experimental_by_default">Eksperimentell som standard</string>
<string name="experimental_by_default_desc">Føles det risikabelt eller bare ønsker å hjelpe til med feilsøking? Å velge dette vil aktivere fremtidige eksperimentelle funksjonene som standard.</string>
diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml
index 8d8dca94..05024ca1 100644
--- a/app/src/main/res/values-pl-rPL/strings.xml
+++ b/app/src/main/res/values-pl-rPL/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Zrzeczenie się</string>
+
</resources>
diff --git a/app/src/main/res/values-pl-rPL/strings_pref_experimental.xml b/app/src/main/res/values-pl-rPL/strings_pref_experimental.xml
index e50a07c2..6f097c15 100644
--- a/app/src/main/res/values-pl-rPL/strings_pref_experimental.xml
+++ b/app/src/main/res/values-pl-rPL/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Zrzeczenie się</string>
<string name="experimental_disclaimer_info">Funkcje eksperymentalne mogą być niestabilne i mogą nigdy nie być wprowadzone. Używaj na własne ryzyko, wyślij opinię i wyłącz je jeśli nie działają dobrze.</string>
<string name="experimental_by_default">Eksperymentalne domyślnie</string>
<string name="experimental_by_default_desc">Lubisz ryzyko lub po prostu chcesz pomóc z debugowaniem? Zaznaczenie tej opcji, będzie domyślnie włączać eksperymentalne funkcje.</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index cca038df..10ae1056 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -58,4 +58,7 @@
The first element is the day, and the second element is the time
-->
<string name="time_template">%1s às %2s</string>
+
+ <string name="disclaimer">Aviso Legal</string>
+
</resources>
diff --git a/app/src/main/res/values-pt-rBR/strings_pref_experimental.xml b/app/src/main/res/values-pt-rBR/strings_pref_experimental.xml
index 3c65356b..eaec0fe8 100644
--- a/app/src/main/res/values-pt-rBR/strings_pref_experimental.xml
+++ b/app/src/main/res/values-pt-rBR/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Aviso Legal</string>
<string name="experimental_disclaimer_info">As funções experimentais podem ser instáveis ​​e podem não funcionar. Use a seu próprio risco, envie comentários e sinta-se livre para desativá-los se eles não funcionarem bem.</string>
<string name="experimental_by_default">Experimental por Padrão</string>
<string name="experimental_by_default_desc">Deseja arriscar-se ou simplesmente quer ajudar com a depuração? Ativando isso, as futuras funções experimentais serão ativadas como padrão.</string>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 0bbdc5ad..0b4df975 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Aviso legal</string>
+
</resources>
diff --git a/app/src/main/res/values-pt-rPT/strings_pref_experimental.xml b/app/src/main/res/values-pt-rPT/strings_pref_experimental.xml
index e5c42a1a..344c0a83 100644
--- a/app/src/main/res/values-pt-rPT/strings_pref_experimental.xml
+++ b/app/src/main/res/values-pt-rPT/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Aviso legal</string>
<string name="experimental_disclaimer_info">As funcionalidades experimentais podem ser instáveis e podem nem sequer ser incluídas na versão final. Utilize-as por sua conta e risco e submeta os relatório com os erros encontrados. Pode desativar esta opção sempre que quiser.</string>
<string name="experimental_by_default">Experimental por defeito</string>
<string name="experimental_by_default_desc">Está a sentir-se com sorte ou apenas quer ajudar com a depuração? Tenha noção que com esta função permitirá que funções futuras experimentais sejam padrão.</string>
diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml
index 1fcfce92..782d8358 100644
--- a/app/src/main/res/values-ro-rRO/strings.xml
+++ b/app/src/main/res/values-ro-rRO/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Excluderea răspunderii</string>
+
</resources>
diff --git a/app/src/main/res/values-ro-rRO/strings_pref_experimental.xml b/app/src/main/res/values-ro-rRO/strings_pref_experimental.xml
index 91c041cf..67d7be5e 100644
--- a/app/src/main/res/values-ro-rRO/strings_pref_experimental.xml
+++ b/app/src/main/res/values-ro-rRO/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Excluderea răspunderii</string>
<string name="experimental_disclaimer_info">Caracteristici experimentale pot fi instabile. Folosește-le pe propriul tău risc, trimite feedback-ul şi nu ezita să le dezactivaţi dacă nu funcţionează bine.</string>
<string name="experimental_by_default">Experimental implicit</string>
<string name="experimental_by_default_desc">Esti aventuros sau doar vrei sa ajuți? Încearcând asta vei activa viitoare funcții experimentale în mod prestabilit.</string>
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 3a0c30af..dfd06afc 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -56,4 +56,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Информация</string>
+
</resources>
diff --git a/app/src/main/res/values-ru-rRU/strings_pref_experimental.xml b/app/src/main/res/values-ru-rRU/strings_pref_experimental.xml
index 9d511c91..100f224e 100644
--- a/app/src/main/res/values-ru-rRU/strings_pref_experimental.xml
+++ b/app/src/main/res/values-ru-rRU/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Информация</string>
<string name="experimental_disclaimer_info">Экспериментальные функции может быть нестабильным и никогда не может сделать его в производство. Используйте на свой страх и риск, обратная связь и не стесняйтесь отключить их, если они не работают хорошо.</string>
<string name="experimental_by_default">Экспериментальный по умолчанию</string>
<string name="experimental_by_default_desc">Чувствуя рискованным или просто хотите, чтобы помочь с отладкой? Проверка, что это позволит будущим экспериментальные функции быть по умолчанию.</string>
diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml
index 9cb3ef9c..b7d88ce0 100644
--- a/app/src/main/res/values-sr-rSP/strings.xml
+++ b/app/src/main/res/values-sr-rSP/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Одрицање одговорности</string>
+
</resources>
diff --git a/app/src/main/res/values-sr-rSP/strings_pref_experimental.xml b/app/src/main/res/values-sr-rSP/strings_pref_experimental.xml
index bb3a4279..107d9e73 100644
--- a/app/src/main/res/values-sr-rSP/strings_pref_experimental.xml
+++ b/app/src/main/res/values-sr-rSP/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Одрицање одговорности</string>
<string name="experimental_disclaimer_info">Експерименталне функције су нестабилне и можда никада неће бити уврштене у апликацију. Користите на сопствени ризик, пошаљите рецензију, слободно их искључите уколико не функционишу како треба.</string>
<string name="experimental_by_default">Подразумевано коришћење експерименталних функција</string>
<string name="experimental_by_default_desc">Желите да помогнете у отклањању грешака?
diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml
index 456bcae1..ce3c1540 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Varning</string>
+
</resources>
diff --git a/app/src/main/res/values-sv-rSE/strings_pref_experimental.xml b/app/src/main/res/values-sv-rSE/strings_pref_experimental.xml
index 78c9063d..6ff34233 100644
--- a/app/src/main/res/values-sv-rSE/strings_pref_experimental.xml
+++ b/app/src/main/res/values-sv-rSE/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Disclaimer</string>
<string name="experimental_disclaimer_info">Experimentella funktioner kan vara ostabila och kanske aldrig implementeras i slutprodukten. Använd dessa på egen risk, skicka feedback, och stäng gärna av dem om de inte fungerar bra.</string>
<string name="experimental_by_default">Experimentell som standard</string>
<string name="experimental_by_default_desc">Känner du dig riskfylld eller bara vill hjälpa till? Att markera den här kommer att aktivera alla framtida experimentella funktioner som standard.</string>
diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml
index 4f2c4734..e8766441 100644
--- a/app/src/main/res/values-th-rTH/strings.xml
+++ b/app/src/main/res/values-th-rTH/strings.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
+<?xml version="1.0" encoding="utf-8"?><!--Generated by crowdin.com-->
<resources>
<string name="feed">ฟีด</string>
<string name="most_recent">ล่าสุด</string>
@@ -52,4 +51,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">ข้อสงวนสิทธิ์</string>
+
</resources>
diff --git a/app/src/main/res/values-th-rTH/strings_pref_experimental.xml b/app/src/main/res/values-th-rTH/strings_pref_experimental.xml
index a4957d32..eddac20d 100644
--- a/app/src/main/res/values-th-rTH/strings_pref_experimental.xml
+++ b/app/src/main/res/values-th-rTH/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">ข้อสงวนสิทธิ์</string>
<string name="experimental_disclaimer_info">คุณสัมบัติทดลองอาจไม่เสถียนและอาจจะไม่ได้อยู่ถาวร ยอมรับความเสี่ยงเองถ้าคุณใช้มัน, ส่งข้อเสนอแนะ หรือ ปิดมันไปเลยก็ได้ถ้ามันไม่ทำงาน</string>
<string name="experimental_by_default">คุณสัมบัติทดลอง โดยค่าเริ่มต้น</string>
<string name="experimental_by_default_desc">ชอบความเสี่ยงหรือแค่อยากจะช่วยหาของข้อผิดพลาด? สามารถทำได้โดยการเปิด คุณสัมบัติทดลอง เป็นค่าเริ่มต้น</string>
diff --git a/app/src/main/res/values-tl-rPH/strings.xml b/app/src/main/res/values-tl-rPH/strings.xml
index 6880e40e..40d2e22a 100644
--- a/app/src/main/res/values-tl-rPH/strings.xml
+++ b/app/src/main/res/values-tl-rPH/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Ang nagpapahayag</string>
+
</resources>
diff --git a/app/src/main/res/values-tl-rPH/strings_pref_experimental.xml b/app/src/main/res/values-tl-rPH/strings_pref_experimental.xml
index d9386710..6debc50f 100644
--- a/app/src/main/res/values-tl-rPH/strings_pref_experimental.xml
+++ b/app/src/main/res/values-tl-rPH/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Ang nagpapahayag</string>
<string name="experimental_disclaimer_info">Ang tampok na pageekspiremento ay hindi siguradong matatag at hindi kailanman ito gagawin sa produksyon. Gamitin sa iyong sariling kapahamakan, ipadala ang feedback, at malaya kang i-disable sila kapag hindi ito nagawa ng maayos.</string>
<string name="experimental_by_default">Ang pageekspiremento ayon sa Default</string>
<string name="experimental_by_default_desc">Ang pakiramdam na parang nasa pilegro o gusto lang tumulong sa pagdi-debug? Tignan kung ito ay naka-enable sa hinaharap na pageekspiremento at ang mga paggawa ay default.</string>
diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml
index f2dc54b2..8e998da0 100644
--- a/app/src/main/res/values-tr-rTR/strings.xml
+++ b/app/src/main/res/values-tr-rTR/strings.xml
@@ -56,4 +56,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Feragat</string>
+
</resources>
diff --git a/app/src/main/res/values-tr-rTR/strings_pref_experimental.xml b/app/src/main/res/values-tr-rTR/strings_pref_experimental.xml
index 75a8ff55..f230382b 100644
--- a/app/src/main/res/values-tr-rTR/strings_pref_experimental.xml
+++ b/app/src/main/res/values-tr-rTR/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Feragat</string>
<string name="experimental_disclaimer_info">Deneysel özellikler dengesiz olabilir ve asla üretime neden olmayabilir. Kendi sorumluluğunuzdadır kullanın, geri bildirim gönderin ve iyi çalışmazlarsa onları devre dışı bırakmaktan çekinmeyin.</string>
<string name="experimental_by_default">Varsayılan deneysel</string>
<string name="experimental_by_default_desc">Hata ayıklamayla yardım etmek mi istiyorsunuz? Bunu kontrol ederseniz, gelecek deneysel işlevlerin varsayılan olmasını sağlayabilirsiniz.</string>
diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml
index 1abb84d5..517f4cb8 100644
--- a/app/src/main/res/values-uk-rUA/strings.xml
+++ b/app/src/main/res/values-uk-rUA/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Відмова від відповідальності</string>
+
</resources>
diff --git a/app/src/main/res/values-uk-rUA/strings_pref_experimental.xml b/app/src/main/res/values-uk-rUA/strings_pref_experimental.xml
index 69c89919..38662371 100644
--- a/app/src/main/res/values-uk-rUA/strings_pref_experimental.xml
+++ b/app/src/main/res/values-uk-rUA/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Відмова від відповідальності</string>
<string name="experimental_disclaimer_info">Експериментальні функції можуть бути нестабільними і можуть ніколи не бути впроваджені. Використовуйте на свій страх і ризик, надішліть відгук і можете вимкнути їх, якщо вони не працюють добре.</string>
<string name="experimental_by_default">Експериментальний режим за замовчуванням</string>
<string name="experimental_by_default_desc">Почуваєшся ризиковано або просто хочеш допомогти з налагодженням? Перевірка цього параметра дозволить використовувати майбутні експериментальні функції за умовчанням.</string>
diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml
index 9b7c39e6..b3c3e737 100644
--- a/app/src/main/res/values-vi-rVN/strings.xml
+++ b/app/src/main/res/values-vi-rVN/strings.xml
@@ -54,4 +54,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">Chối bỏ trách nhiệm</string>
+
</resources>
diff --git a/app/src/main/res/values-vi-rVN/strings_pref_experimental.xml b/app/src/main/res/values-vi-rVN/strings_pref_experimental.xml
index 789802c4..f8350b72 100644
--- a/app/src/main/res/values-vi-rVN/strings_pref_experimental.xml
+++ b/app/src/main/res/values-vi-rVN/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">Chối bỏ trách nhiệm</string>
<string name="experimental_disclaimer_info">Các tính năng thử nghiệm có thể không ổn định và có thể không bao giờ thành hiện thực. Bạn chấp nhận rủi ro khi dùng, hãy tắt nó đi nếu bạn thấy không hoạt động tốt.</string>
<string name="experimental_by_default">Thử nghiệm theo mặc định</string>
<string name="experimental_by_default_desc">Muốn thử hay chỉ đơn giản muốn giúp soát lỗi? Đánh dấu ở đây sẽ bật các tính năng thử nghiệm tương lai theo mặc định.</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index bf5ced6a..e0f807f0 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -48,4 +48,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">免责声明</string>
+
</resources>
diff --git a/app/src/main/res/values-zh-rCN/strings_pref_experimental.xml b/app/src/main/res/values-zh-rCN/strings_pref_experimental.xml
index 444bd281..6d180ec0 100644
--- a/app/src/main/res/values-zh-rCN/strings_pref_experimental.xml
+++ b/app/src/main/res/values-zh-rCN/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">免责声明</string>
<string name="experimental_disclaimer_info">实验性的功能可能不稳定,也许都不会正式使用。选择使用您自己的风险。如果有发生崩溃, 发送反馈,并禁用它们。</string>
<string name="experimental_by_default">默认情况下实验</string>
<string name="experimental_by_default_desc">感觉有风险或只是想要帮助进行调试?检查这将使未来的实验功能是默认类型。</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 3d22540b..6e6ea5a2 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -53,4 +53,7 @@
The first element is the day, and the second element is the time
-->
+
+ <string name="disclaimer">免責聲明</string>
+
</resources>
diff --git a/app/src/main/res/values-zh-rTW/strings_pref_experimental.xml b/app/src/main/res/values-zh-rTW/strings_pref_experimental.xml
index caa2848c..25291512 100644
--- a/app/src/main/res/values-zh-rTW/strings_pref_experimental.xml
+++ b/app/src/main/res/values-zh-rTW/strings_pref_experimental.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
- <string name="experimental_disclaimer">免責聲明</string>
<string name="experimental_disclaimer_info">實驗性的特性可能不穩定, 可能永遠無法生產。選擇使用您自己的風險, 發回饋, 並隨時禁用他們
实验性的功能可能不稳定,也许都不会正式使用。选择使用您自己的风险。如果有发生崩溃, 发送反馈,并禁用它们。</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index db9b30d5..29d00a6f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -62,6 +62,8 @@
<string name="no_new_notifications">No new notifications found</string>
+ <!--Biometrics-->
+ <string name="biometrics_prompt_title">Authenticate Frost</string>
<string name="today">Today</string>
<string name="yesterday">Yesterday</string>
<!--
@@ -74,4 +76,6 @@
-->
<string name="time_template">%1s at %2s</string>
+ <string name="disclaimer">Disclaimer</string>
+
</resources>
diff --git a/app/src/main/res/values/strings_pref_experimental.xml b/app/src/main/res/values/strings_pref_experimental.xml
index 9ccf5577..95d54ff2 100644
--- a/app/src/main/res/values/strings_pref_experimental.xml
+++ b/app/src/main/res/values/strings_pref_experimental.xml
@@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
-
- <string name="experimental_disclaimer">Disclaimer</string>
<string name="experimental_disclaimer_info">Experimental features may be unstable and may never make it to production. Use at your own risk, send feedback, and feel free to disable them if they don\'t work well.</string>
<string name="experimental_by_default">Experimental by Default</string>
<string name="experimental_by_default_desc">Feeling risky or just want to help with debugging? Checking this will enable future experimental functions be default.</string>
diff --git a/app/src/main/res/values/strings_pref_security.xml b/app/src/main/res/values/strings_pref_security.xml
new file mode 100644
index 00000000..5e0bcac3
--- /dev/null
+++ b/app/src/main/res/values/strings_pref_security.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="security_disclaimer_info">Security preferences help protect access to Frost from the UI. However, note that local data is not encrypted, and can still be accessed by rooted users.</string>
+ <string name="enable_biometrics">Enable biometrics</string>
+ <string name="enable_biometrics_desc">Require biometric authentication after inactivity</string>
+</resources> \ No newline at end of file
diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml
index 84f39850..646e3595 100644
--- a/app/src/main/res/values/strings_preferences.xml
+++ b/app/src/main/res/values/strings_preferences.xml
@@ -10,6 +10,9 @@
<string name="behaviour">Behaviour</string>
<string name="behaviour_desc">Define how the app interacts in certain settings</string>
+ <string name="security">Security</string>
+ <string name="security_desc">Lock screen, biometrics, etc</string>
+
<string name="network">Network</string>
<string name="network_desc">Define options that affect metered networks</string>
diff --git a/app/src/main/res/xml/frost_changelog.xml b/app/src/main/res/xml/frost_changelog.xml
index 93124f75..3e4f9036 100644
--- a/app/src/main/res/xml/frost_changelog.xml
+++ b/app/src/main/res/xml/frost_changelog.xml
@@ -11,8 +11,8 @@
<item text="Added notification widget" />
<item text="Update theme" />
<item text="Update translations" />
- <item text="" />
- <item text="" />
+ <item text="Add fingerprint unlock screen" />
+ <item text="Fix messenger redirect" />
<item text="" />
<item text="" />
<item text="" />
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 39e7fa82..b7320066 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -3,6 +3,10 @@
## v2.3.0
* Converted internals of Facebook data storage; auto migration will only work from 2.2.x to 2.3.x
* Added notification widget
+* Update theme
+* Update translations
+* Add fingerprint unlock screen
+* Fix messenger redirect
## v2.2.4
* Show top bar to allow sharing posts
diff --git a/gradle.properties b/gradle.properties
index 84d8a461..c64655c4 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -25,6 +25,8 @@ ANDROID_GRADLE=3.3.2
# https://github.com/diffplug/spotless/blob/master/plugin-gradle/CHANGES.md
SPOTLESS=3.21.1
+ANDX_BIOMETRIC=1.0.0-alpha04
+
# https://github.com/bugsnag/bugsnag-android/releases
BUGSNAG=4.12.0
# https://github.com/bugsnag/bugsnag-android-gradle-plugin/releases