diff --git a/app/src/main/java/com/philkes/notallyx/NotallyXApplication.kt b/app/src/main/java/com/philkes/notallyx/NotallyXApplication.kt index b6be888d..8ee88b0a 100644 --- a/app/src/main/java/com/philkes/notallyx/NotallyXApplication.kt +++ b/app/src/main/java/com/philkes/notallyx/NotallyXApplication.kt @@ -1,15 +1,18 @@ package com.philkes.notallyx +import android.app.Activity import android.app.Application import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build +import android.os.Bundle import androidx.appcompat.app.AppCompatDelegate import androidx.lifecycle.Observer import androidx.work.WorkInfo import androidx.work.WorkManager import com.google.android.material.color.DynamicColors +import com.philkes.notallyx.presentation.setEnabledSecureFlag import com.philkes.notallyx.presentation.view.misc.NotNullLiveData import com.philkes.notallyx.presentation.viewmodel.preference.BiometricLock import com.philkes.notallyx.presentation.viewmodel.preference.NotallyXPreferences @@ -33,7 +36,7 @@ import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class NotallyXApplication : Application() { +class NotallyXApplication : Application(), Application.ActivityLifecycleCallbacks { private lateinit var biometricLockObserver: Observer private lateinit var preferences: NotallyXPreferences @@ -43,6 +46,7 @@ class NotallyXApplication : Application() { override fun onCreate() { super.onCreate() + registerActivityLifecycleCallbacks(this) if (isTestRunner()) return preferences = NotallyXPreferences.getInstance(this) if (preferences.useDynamicColors.value) { @@ -168,4 +172,20 @@ class NotallyXApplication : Application() { return Build.FINGERPRINT.equals("robolectric", ignoreCase = true) } } + + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { + activity.setEnabledSecureFlag(preferences.secureFlag.value) + } + + override fun onActivityStarted(activity: Activity) {} + + override fun onActivityResumed(activity: Activity) {} + + override fun onActivityPaused(activity: Activity) {} + + override fun onActivityStopped(activity: Activity) {} + + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} + + override fun onActivityDestroyed(activity: Activity) {} } diff --git a/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt b/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt index 17d5e0f6..3e83350f 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/UiExtensions.kt @@ -531,6 +531,17 @@ fun Activity.checkAlarmPermission( } else onSuccess() } +fun Activity.setEnabledSecureFlag(enabled: Boolean) { + if (enabled) { + window.setFlags( + WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE, + ) + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } +} + fun Fragment.displayEditLabelDialog( oldValue: String, model: BaseNoteModel, diff --git a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/settings/SettingsFragment.kt b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/settings/SettingsFragment.kt index ec267512..d41aac0a 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/settings/SettingsFragment.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/activity/main/fragment/settings/SettingsFragment.kt @@ -33,6 +33,7 @@ import com.philkes.notallyx.databinding.DialogTextInputBinding import com.philkes.notallyx.databinding.FragmentSettingsBinding import com.philkes.notallyx.presentation.activity.main.MainActivity import com.philkes.notallyx.presentation.setCancelButton +import com.philkes.notallyx.presentation.setEnabledSecureFlag import com.philkes.notallyx.presentation.setupImportProgressDialog import com.philkes.notallyx.presentation.setupProgressDialog import com.philkes.notallyx.presentation.showAndFocus @@ -592,6 +593,14 @@ class SettingsFragment : Fragment() { model.savePreference(backupPassword, newValue) } } + + secureFlag.observe(viewLifecycleOwner) { value -> + binding.SecureFlag.setup(secureFlag, value, requireContext(), layoutInflater) { newValue + -> + model.savePreference(secureFlag, newValue) + activity?.setEnabledSecureFlag(newValue) + } + } } private fun NotallyXPreferences.setupSettings(binding: FragmentSettingsBinding) { diff --git a/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/NotallyXPreferences.kt b/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/NotallyXPreferences.kt index 560dcebf..6a80b255 100644 --- a/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/NotallyXPreferences.kt +++ b/app/src/main/java/com/philkes/notallyx/presentation/viewmodel/preference/NotallyXPreferences.kt @@ -135,6 +135,8 @@ class NotallyXPreferences private constructor(private val context: Context) { val fallbackDatabaseEncryptionKey by lazy { ByteArrayPreference("fallback_database_encryption_key", encryptedPreferences, ByteArray(0)) } + val secureFlag = + BooleanPreference("secureFlag", preferences, false, R.string.disallow_screenshots) val dataInPublicFolder = BooleanPreference("dataOnExternalStorage", preferences, false, R.string.data_in_public) @@ -223,6 +225,7 @@ class NotallyXPreferences private constructor(private val context: Context) { maxItems, maxLines, maxTitle, + secureFlag, labelsHidden, labelTagsHiddenInOverview, maxLabels, diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 452e8fa0..0b069b46 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -173,6 +173,10 @@ android:id="@+id/BackupPassword" layout="@layout/preference" /> + + Dies entschlüsselt außerdem die Datenbank Deaktivierte Biometrie/PIN Sperre Deaktiviert + Screenshots verbieten Verwerfen Anzeigetext Spende diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ebec8f20..5cd4518e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -121,6 +121,7 @@ This will also decrypt the database Disable lock via Biometric/PIN Disabled + Disallow Screenshots Discard Text to display Make a Donation diff --git a/app/translations.xlsx b/app/translations.xlsx index fa164d04..1b6bc7c2 100644 Binary files a/app/translations.xlsx and b/app/translations.xlsx differ