2023-05-31 14:53:46 +02:00
|
|
|
package org.thoughtcrime.securesms.preferences
|
|
|
|
|
|
|
|
import android.app.KeyguardManager
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.net.Uri
|
|
|
|
import android.os.Build
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.provider.Settings
|
|
|
|
import androidx.preference.Preference
|
|
|
|
import network.loki.messenger.BuildConfig
|
|
|
|
import network.loki.messenger.R
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences.Companion.isPasswordDisabled
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences.Companion.setScreenLockEnabled
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext
|
|
|
|
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
|
|
|
import org.thoughtcrime.securesms.permissions.Permissions
|
|
|
|
import org.thoughtcrime.securesms.service.KeyCachingService
|
2023-05-31 15:53:53 +02:00
|
|
|
import org.thoughtcrime.securesms.showSessionDialog
|
2023-05-31 14:53:46 +02:00
|
|
|
import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.areNotificationsEnabled
|
|
|
|
import org.thoughtcrime.securesms.util.IntentUtils
|
|
|
|
|
|
|
|
class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() {
|
|
|
|
override fun onCreate(paramBundle: Bundle?) {
|
|
|
|
super.onCreate(paramBundle)
|
2023-05-31 15:53:53 +02:00
|
|
|
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!
|
|
|
|
.onPreferenceChangeListener = ScreenLockListener()
|
|
|
|
findPreference<Preference>(TextSecurePreferences.TYPING_INDICATORS)!!
|
|
|
|
.onPreferenceChangeListener = TypingIndicatorsToggleListener()
|
|
|
|
findPreference<Preference>(TextSecurePreferences.CALL_NOTIFICATIONS_ENABLED)!!
|
|
|
|
.onPreferenceChangeListener = CallToggleListener(this) { setCall(it) }
|
2023-05-31 14:53:46 +02:00
|
|
|
initializeVisibility()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun setCall(isEnabled: Boolean) {
|
|
|
|
(findPreference<Preference>(TextSecurePreferences.CALL_NOTIFICATIONS_ENABLED) as SwitchPreferenceCompat?)!!.isChecked =
|
|
|
|
isEnabled
|
|
|
|
if (isEnabled && !areNotificationsEnabled(requireActivity())) {
|
|
|
|
// show a dialog saying that calls won't work properly if you don't have notifications on at a system level
|
2023-05-31 15:53:53 +02:00
|
|
|
showSessionDialog {
|
|
|
|
title(R.string.CallNotificationBuilder_system_notification_title)
|
|
|
|
text(R.string.CallNotificationBuilder_system_notification_message)
|
|
|
|
button(R.string.activity_notification_settings_title) {
|
2023-05-31 14:53:46 +02:00
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
2023-05-31 15:53:53 +02:00
|
|
|
Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
|
2023-05-31 14:53:46 +02:00
|
|
|
.putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID)
|
|
|
|
} else {
|
2023-05-31 15:53:53 +02:00
|
|
|
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
2023-05-31 14:53:46 +02:00
|
|
|
.setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID))
|
|
|
|
}
|
2023-05-31 15:53:53 +02:00
|
|
|
.apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }
|
2023-08-08 04:28:34 +02:00
|
|
|
.takeIf { IntentUtils.isResolvable(requireContext(), it) }?.let {
|
2023-05-31 15:53:53 +02:00
|
|
|
startActivity(it)
|
|
|
|
}
|
2023-05-31 14:53:46 +02:00
|
|
|
}
|
2023-05-31 15:53:53 +02:00
|
|
|
button(R.string.dismiss)
|
|
|
|
}
|
2023-05-31 14:53:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onRequestPermissionsResult(
|
|
|
|
requestCode: Int,
|
|
|
|
permissions: Array<String>,
|
|
|
|
grantResults: IntArray
|
|
|
|
) {
|
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
|
|
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
|
|
|
addPreferencesFromResource(R.xml.preferences_app_protection)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun initializeVisibility() {
|
2023-05-31 15:53:53 +02:00
|
|
|
if (isPasswordDisabled(requireContext())) {
|
2023-05-31 14:53:46 +02:00
|
|
|
val keyguardManager =
|
2023-05-31 15:53:53 +02:00
|
|
|
requireContext().getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
|
2023-05-31 14:53:46 +02:00
|
|
|
if (!keyguardManager.isKeyguardSecure) {
|
2023-05-31 15:53:53 +02:00
|
|
|
findPreference<SwitchPreferenceCompat>(TextSecurePreferences.SCREEN_LOCK)!!.isChecked = false
|
|
|
|
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.isEnabled = false
|
2023-05-31 14:53:46 +02:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.isVisible = false
|
2023-05-31 15:53:53 +02:00
|
|
|
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK_TIMEOUT)!!.isVisible = false
|
2023-05-31 14:53:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private inner class ScreenLockListener : Preference.OnPreferenceChangeListener {
|
|
|
|
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
|
|
|
|
val enabled = newValue as Boolean
|
|
|
|
setScreenLockEnabled(context!!, enabled)
|
|
|
|
val intent = Intent(context, KeyCachingService::class.java)
|
|
|
|
intent.action = KeyCachingService.LOCK_TOGGLED_EVENT
|
|
|
|
context!!.startService(intent)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private inner class TypingIndicatorsToggleListener : Preference.OnPreferenceChangeListener {
|
|
|
|
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
|
|
|
|
val enabled = newValue as Boolean
|
|
|
|
if (!enabled) {
|
|
|
|
ApplicationContext.getInstance(requireContext()).typingStatusRepository.clear()
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|