Skip to content
This repository was archived by the owner on Sep 23, 2024. It is now read-only.

Commit a7ef74f

Browse files
johanw666pixincreate
authored andcommitted
Added extra options
- Removed apk expire. - Choose between passphrase protection and the Android screenlock. - Option to treat view-once media as normal media. - Option to ignore remote deletion. - Choose between FCM or websocket notification delivery. - Option to delete only the media from a message, not the rest of the message. - Removed forward limit. - Enabled internal preferences. Use at your own risk. - Added options to select who can add you to a group. Script: COMMIT_ID=c6f74bf5e41ea79e95d332300b8093358eb4d91f UPSTREAM="upstream/main" git cherry-pick $COMMIT_ID reset_list=( "README.md" "app/build.gradle.kts" "app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java" "app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java" "app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java" "app/src/main/java/org/thoughtcrime/securesms/database" "app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.kt" "app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java" "app/src/main/java/org/thoughtcrime/securesms/util/BackupUtil.java" "app/src/main/java/org/thoughtcrime/securesms/util/StorageUtil.java" "app/src/main/java/org/thoughtcrime/securesms/util/Util.java" "gradle/verification-metadata.xml" "app/src/main/res" ) remove_list=( "app/src/main/java/org/thoughtcrime/securesms/ExitActivity.java" "app/src/main/java/org/thoughtcrime/securesms/ImportExportActivity.java" "app/src/main/java/org/thoughtcrime/securesms/ImportExportFragment.java" "app/src/main/java/org/thoughtcrime/securesms/ImportWhatsappDialog.java" "app/src/main/java/org/thoughtcrime/securesms/database/whatsapp" "app/src/main/java/org/thoughtcrime/securesms/util/FileUtilsJW.java" "app/src/main/java/org/thoughtcrime/securesms/util/UriUtils.java" ) for i in "${reset_list[@]}"; do echo "Resetting $i to state in $UPSTREAM" git checkout "$UPSTREAM" -- "$i" done for i in "${remove_list[@]}"; do echo "Removing $i to state in $UPSTREAM" git rm "$i" done git checkout HEAD -- "app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.kt" git checkout HEAD -- "app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt" echo ' <?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"> <string-array name="pref_group_add_entries"> <item>@string/preferences__group_anyone</item> <item>@string/preferences__group_non_blocked</item> <item>@string/preferences__group_only_contats</item> <item>@string/preferences__group_only_systemcontats</item> <item>@string/preferences__group_nobody</item> </string-array> <string-array name="pref_group_add_values" translatable="false"> <item>anyone</item> <item>nonblocked</item> <item>onlycontacts</item> <item>onlysystemcontacts</item> <item>nobody</item> </string-array> </resources> ' > 'app/src/main/res/values/arrays1.xml' echo ' <?xml version="1.0" encoding="utf-8"?> <resources> <!-- preferences.xml --> <string name="preferences__group_anyone">Anyone</string> <string name="preferences__group_non_blocked">All non-blocked persons</string> <string name="preferences__group_only_contats">Only contacts</string> <string name="preferences__group_only_systemcontats">Only non-blocked system contacts</string> <string name="preferences__group_nobody">Nobody</string> <!-- app protection--> <string name="preferences_app_protection__method_passphrase">Use a passphrase</string> <string name="preferences_app_protection__method_passphrase_summary">Use a passphrase to protect Signal instead of the Android screen lock or fingerprint</string> <string name="preferences_app_protection__screenlock_requires_lollipop">Using the system screenlock requires Android 5.0 (Lollipop) or higher.</string> <string name="preferences_app_protection__android_version_too_low">Android version too low</string> <!-- FCM switch --> <string name="preferences_advanced__push_notifications_fcm">Push Notifications via FCM</string> <string name="preferences_advanced__push_notifications_fcm_summary">Receive push notifications via Google Play Services. When switched off a websocket will be used, which might cause more battery usage</string> <string name="preferences_advanced__play_services_not_found">Google Play Services not found</string> <string name="preferences_advanced__need_to_restart">Signal needs to restart for the changes to take effect</string> <string name="ImportFragment_restore_ok">OK</string> <!-- Keep messages --> <string name="preferences_chats__control_message_deletion">Control message deletion</string> <string name="preferences_chats__chat_keep_view_once_messages">Keep view-once media</string> <string name="preferences_chats__keep_view_once_messages_summary">When checked incoming view-once media will be treated as normal view-always media and will not be deleted after view</string> <string name="preferences_chats__chat_ignore_remote_delete">Ignore remote delete</string> <string name="preferences_chats__chat_ignore_remote_delete_summary">When checked, this option prevents the remote deletion of messages by the sender</string> <string name="preferences_chats__delete_media_only">Delete media only</string> <string name="preferences_chats__delete_media_only_summary">Delete only media, not the message itself, when media is deleted in the All media screen</string> <!-- group control --> <string name="preferences_chats__group_control">Group control</string> <string name="preferences_chats__who_can_add_you_to_groups">Who can add you to groups</string> </resources> ' > 'app/src/main/res/values/strings1.xml'
1 parent ee5565d commit a7ef74f

24 files changed

+680
-141
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,9 +663,11 @@
663663
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
664664
android:exported="false"/>
665665

666+
<!-- JW: added the windowSoftInputMode="stateAlwaysVisible" flag here to show a keyboard on open -->
666667
<activity android:name=".PassphrasePromptActivity"
667668
android:launchMode="singleTask"
668669
android:theme="@style/Theme.Signal.DayNight.NoActionBar"
670+
android:windowSoftInputMode="stateAlwaysVisible"
669671
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
670672
android:exported="false"/>
671673

app/src/main/java/org/thoughtcrime/securesms/AppInitialization.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static void onFirstEverAppLaunch(@NonNull Context context) {
3333
TextSecurePreferences.setJobManagerVersion(context, JobManager.CURRENT_VERSION);
3434
TextSecurePreferences.setLastVersionCode(context, Util.getCanonicalVersionCode());
3535
TextSecurePreferences.setHasSeenStickerIntroTooltip(context, true);
36-
TextSecurePreferences.setPasswordDisabled(context, true);
36+
//TextSecurePreferences.setPasswordDisabled(context, true); // JW: don't do this
3737
TextSecurePreferences.setReadReceiptsEnabled(context, true);
3838
TextSecurePreferences.setTypingIndicatorsEnabled(context, true);
3939
TextSecurePreferences.setHasSeenWelcomeScreen(context, false);
@@ -73,7 +73,7 @@ public static void onRepairFirstEverAppLaunch(@NonNull Context context) {
7373
TextSecurePreferences.setJobManagerVersion(context, JobManager.CURRENT_VERSION);
7474
TextSecurePreferences.setLastVersionCode(context, Util.getCanonicalVersionCode());
7575
TextSecurePreferences.setHasSeenStickerIntroTooltip(context, true);
76-
TextSecurePreferences.setPasswordDisabled(context, true);
76+
//TextSecurePreferences.setPasswordDisabled(context, true); // JW: don't do this
7777
AppDependencies.getMegaphoneRepository().onFirstEverAppLaunch();
7878
SignalStore.onFirstEverAppLaunch();
7979
AppDependencies.getJobManager().add(StickerPackDownloadJob.forInstall(BlessedPacks.ZOZO.getPackId(), BlessedPacks.ZOZO.getPackKey(), false));

app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import android.view.MenuItem;
3535
import android.view.View;
3636
import android.view.View.OnClickListener;
37+
import android.view.WindowManager; // JW: added
3738
import android.view.animation.Animation;
3839
import android.view.animation.BounceInterpolator;
3940
import android.view.animation.TranslateAnimation;
@@ -289,11 +290,15 @@ private void initializeResources() {
289290
private void setLockTypeVisibility() {
290291
if (TextSecurePreferences.isScreenLockEnabled(this)) {
291292
passphraseAuthContainer.setVisibility(View.GONE);
293+
// JW: to override setSoftInputMode it has to be defined in the manifest file
294+
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); // JW
292295
fingerprintPrompt.setVisibility(biometricManager.canAuthenticate(BiometricDeviceAuthentication.BIOMETRIC_AUTHENTICATORS) == BiometricManager.BIOMETRIC_SUCCESS ? View.VISIBLE
293296
: View.GONE);
294297
lockScreenButton.setVisibility(View.VISIBLE);
295298
} else {
296299
passphraseAuthContainer.setVisibility(View.VISIBLE);
300+
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); // JW
301+
passphraseText.requestFocus(); // JW
297302
fingerprintPrompt.setVisibility(View.GONE);
298303
lockScreenButton.setVisibility(View.GONE);
299304
}

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
99
import org.thoughtcrime.securesms.components.settings.DSLSettingsText
1010
import org.thoughtcrime.securesms.components.settings.app.subscription.donate.CheckoutFlowActivity
1111
import org.thoughtcrime.securesms.components.settings.configure
12+
import org.thoughtcrime.securesms.util.TextSecurePreferences // JW: added
1213
import org.thoughtcrime.securesms.util.RemoteConfig
1314
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
1415
import org.thoughtcrime.securesms.util.navigation.safeNavigate
1516

1617
class ChatsSettingsFragment : DSLSettingsFragment(R.string.preferences_chats__chats) {
1718

1819
private lateinit var viewModel: ChatsSettingsViewModel
20+
private val groupAddLabels by lazy { resources.getStringArray(R.array.pref_group_add_entries) } // JW: added
21+
private val groupAddValues by lazy { resources.getStringArray(R.array.pref_group_add_values) } // JW: added
1922

2023
override fun onResume() {
2124
super.onResume()
@@ -105,6 +108,54 @@ class ChatsSettingsFragment : DSLSettingsFragment(R.string.preferences_chats__ch
105108
Navigation.findNavController(requireView()).safeNavigate(R.id.action_chatsSettingsFragment_to_backupsPreferenceFragment)
106109
}
107110
)
111+
112+
dividerPref()
113+
114+
sectionHeaderPref(R.string.preferences_chats__control_message_deletion)
115+
116+
// JW: added
117+
switchPref(
118+
title = DSLSettingsText.from(R.string.preferences_chats__chat_keep_view_once_messages),
119+
summary = DSLSettingsText.from(R.string.preferences_chats__keep_view_once_messages_summary),
120+
isChecked = state.keepViewOnceMessages,
121+
onClick = {
122+
viewModel.keepViewOnceMessages(!state.keepViewOnceMessages)
123+
}
124+
)
125+
126+
// JW: added
127+
switchPref(
128+
title = DSLSettingsText.from(R.string.preferences_chats__chat_ignore_remote_delete),
129+
summary = DSLSettingsText.from(R.string.preferences_chats__chat_ignore_remote_delete_summary),
130+
isChecked = state.ignoreRemoteDelete,
131+
onClick = {
132+
viewModel.ignoreRemoteDelete(!state.ignoreRemoteDelete)
133+
}
134+
)
135+
136+
// JW: added
137+
switchPref(
138+
title = DSLSettingsText.from(R.string.preferences_chats__delete_media_only),
139+
summary = DSLSettingsText.from(R.string.preferences_chats__delete_media_only_summary),
140+
isChecked = state.deleteMediaOnly,
141+
onClick = {
142+
viewModel.deleteMediaOnly(!state.deleteMediaOnly)
143+
}
144+
)
145+
146+
dividerPref()
147+
148+
sectionHeaderPref(R.string.preferences_chats__group_control)
149+
150+
// JW: added
151+
radioListPref(
152+
title = DSLSettingsText.from(R.string.preferences_chats__who_can_add_you_to_groups),
153+
listItems = groupAddLabels,
154+
selected = groupAddValues.indexOf(state.whoCanAddYouToGroups),
155+
onSelected = {
156+
viewModel.setWhoCanAddYouToGroups(groupAddValues[it])
157+
}
158+
)
108159
}
109160
}
110161
}

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,10 @@ data class ChatsSettingsState(
88
val enterKeySends: Boolean,
99
val localBackupsEnabled: Boolean,
1010
val canAccessRemoteBackupsSettings: Boolean
11+
// JW: added extra preferences
12+
,
13+
val keepViewOnceMessages: Boolean,
14+
val ignoreRemoteDelete: Boolean,
15+
val deleteMediaOnly: Boolean,
16+
val whoCanAddYouToGroups: String
1117
)

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies
1111
import org.thoughtcrime.securesms.keyvalue.SignalStore
1212
import org.thoughtcrime.securesms.util.BackupUtil
1313
import org.thoughtcrime.securesms.util.ConversationUtil
14+
import org.thoughtcrime.securesms.util.TextSecurePreferences // JW: added
1415
import org.thoughtcrime.securesms.util.ThrottledDebouncer
1516
import org.thoughtcrime.securesms.util.livedata.Store
1617

@@ -28,7 +29,13 @@ class ChatsSettingsViewModel @JvmOverloads constructor(
2829
useSystemEmoji = SignalStore.settings.isPreferSystemEmoji,
2930
enterKeySends = SignalStore.settings.isEnterKeySends,
3031
localBackupsEnabled = SignalStore.settings.isBackupEnabled && BackupUtil.canUserAccessBackupDirectory(AppDependencies.application),
31-
canAccessRemoteBackupsSettings = SignalStore.backup.areBackupsEnabled
32+
canAccessRemoteBackupsSettings = SignalStore.backup.areBackupsEnabled
33+
// JW: added
34+
,
35+
keepViewOnceMessages = TextSecurePreferences.isKeepViewOnceMessages(AppDependencies.application),
36+
ignoreRemoteDelete = TextSecurePreferences.isIgnoreRemoteDelete(AppDependencies.application),
37+
deleteMediaOnly = TextSecurePreferences.isDeleteMediaOnly(AppDependencies.application),
38+
whoCanAddYouToGroups = TextSecurePreferences.whoCanAddYouToGroups(AppDependencies.application)
3239
)
3340
)
3441

@@ -83,5 +90,46 @@ class ChatsSettingsViewModel @JvmOverloads constructor(
8390
) {
8491
store.update { it.copy(localBackupsEnabled = backupsEnabled, canAccessRemoteBackupsSettings = remoteBackupsEnabled) }
8592
}
93+
// JW: added. This is required to update the UI for settings that are not in the Signal store but in the shared preferences.
94+
store.update { getState().copy() }
8695
}
96+
97+
// JW: added
98+
fun keepViewOnceMessages(enabled: Boolean) {
99+
TextSecurePreferences.setKeepViewOnceMessages(AppDependencies.application, enabled)
100+
refresh()
101+
}
102+
103+
// JW: added
104+
fun ignoreRemoteDelete(enabled: Boolean) {
105+
TextSecurePreferences.setIgnoreRemoteDelete(AppDependencies.application, enabled)
106+
refresh()
107+
}
108+
109+
// JW: added
110+
fun deleteMediaOnly(enabled: Boolean) {
111+
TextSecurePreferences.setDeleteMediaOnly(AppDependencies.application, enabled)
112+
refresh()
113+
}
114+
115+
// JW: added
116+
fun setWhoCanAddYouToGroups(adder: String) {
117+
TextSecurePreferences.setWhoCanAddYouToGroups(AppDependencies.application, adder)
118+
refresh()
119+
}
120+
121+
// JW: added
122+
private fun getState() = ChatsSettingsState(
123+
generateLinkPreviews = SignalStore.settings.isLinkPreviewsEnabled,
124+
useAddressBook = SignalStore.settings.isPreferSystemContactPhotos,
125+
keepMutedChatsArchived = SignalStore.settings.shouldKeepMutedChatsArchived(),
126+
useSystemEmoji = SignalStore.settings.isPreferSystemEmoji,
127+
enterKeySends = SignalStore.settings.isEnterKeySends,
128+
localBackupsEnabled = SignalStore.settings.isBackupEnabled,
129+
canAccessRemoteBackupsSettings = SignalStore.backup.areBackupsEnabled,
130+
keepViewOnceMessages = TextSecurePreferences.isKeepViewOnceMessages(AppDependencies.application),
131+
ignoreRemoteDelete = TextSecurePreferences.isIgnoreRemoteDelete(AppDependencies.application),
132+
deleteMediaOnly = TextSecurePreferences.isDeleteMediaOnly(AppDependencies.application),
133+
whoCanAddYouToGroups = TextSecurePreferences.whoCanAddYouToGroups(AppDependencies.application)
134+
)
87135
}

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -181,30 +181,62 @@ class PrivacySettingsFragment : DSLSettingsFragment(R.string.preferences__privac
181181

182182
sectionHeaderPref(R.string.PrivacySettingsFragment__app_security)
183183

184-
if (state.isObsoletePasswordEnabled) {
184+
// JW: added toggle between password and Android screenlock
185+
switchPref(
186+
title = DSLSettingsText.from(R.string.preferences_app_protection__method_passphrase),
187+
summary = DSLSettingsText.from(R.string.preferences_app_protection__method_passphrase_summary),
188+
isChecked = state.isProtectionMethodPassphrase,
189+
onClick = {
190+
// After a togggle, we disable both passphrase and Android keylock.
191+
// Remove the passphrase if there is one set
192+
if (state.isObsoletePasswordEnabled) {
193+
MasterSecretUtil.changeMasterSecretPassphrase(
194+
activity,
195+
KeyCachingService.getMasterSecret(context),
196+
MasterSecretUtil.UNENCRYPTED_PASSPHRASE
197+
)
198+
TextSecurePreferences.setPasswordDisabled(activity, true)
199+
val intent = Intent(context, KeyCachingService::class.java)
200+
intent.action = KeyCachingService.DISABLE_ACTION
201+
requireActivity().startService(intent)
202+
}
203+
TextSecurePreferences.setProtectionMethod(activity, !state.isProtectionMethodPassphrase)
204+
viewModel.setNoLock()
205+
}
206+
)
207+
208+
//if (state.isObsoletePasswordEnabled) {
209+
if (viewModel.isPassphraseSelected()) { // JW: method changed
185210
switchPref(
186211
title = DSLSettingsText.from(R.string.preferences__enable_passphrase),
187212
summary = DSLSettingsText.from(R.string.preferences__lock_signal_and_message_notifications_with_a_passphrase),
188-
isChecked = true,
213+
isChecked = state.isObsoletePasswordEnabled, // JW
189214
onClick = {
190-
MaterialAlertDialogBuilder(requireContext()).apply {
191-
setTitle(R.string.ApplicationPreferencesActivity_disable_passphrase)
192-
setMessage(R.string.ApplicationPreferencesActivity_this_will_permanently_unlock_signal_and_message_notifications)
193-
setIcon(R.drawable.symbol_error_triangle_fill_24)
194-
setPositiveButton(R.string.ApplicationPreferencesActivity_disable) { _, _ ->
195-
MasterSecretUtil.changeMasterSecretPassphrase(
196-
activity,
197-
KeyCachingService.getMasterSecret(context),
198-
MasterSecretUtil.UNENCRYPTED_PASSPHRASE
199-
)
200-
TextSecurePreferences.setPasswordDisabled(activity, true)
201-
val intent = Intent(activity, KeyCachingService::class.java)
202-
intent.action = KeyCachingService.DISABLE_ACTION
203-
requireActivity().startService(intent)
204-
viewModel.refresh()
215+
if (state.isObsoletePasswordEnabled) { // JW: added if else
216+
MaterialAlertDialogBuilder(requireContext()).apply {
217+
setTitle(R.string.ApplicationPreferencesActivity_disable_passphrase)
218+
setMessage(R.string.ApplicationPreferencesActivity_this_will_permanently_unlock_signal_and_message_notifications)
219+
setIcon(R.drawable.symbol_error_triangle_fill_24)
220+
setPositiveButton(R.string.ApplicationPreferencesActivity_disable) { _, _ ->
221+
MasterSecretUtil.changeMasterSecretPassphrase(
222+
activity,
223+
KeyCachingService.getMasterSecret(context),
224+
MasterSecretUtil.UNENCRYPTED_PASSPHRASE
225+
)
226+
TextSecurePreferences.setPasswordDisabled(activity, true)
227+
val intent = Intent(activity, KeyCachingService::class.java)
228+
intent.action = KeyCachingService.DISABLE_ACTION
229+
requireActivity().startService(intent)
230+
viewModel.refresh()
231+
}
232+
setNegativeButton(android.R.string.cancel, null)
233+
show()
205234
}
206-
setNegativeButton(android.R.string.cancel, null)
207-
show()
235+
} else {
236+
// enable password
237+
val intent = Intent(activity, PassphraseChangeActivity::class.java)
238+
startActivity(intent)
239+
viewModel.refresh()
208240
}
209241
}
210242
)
@@ -236,14 +268,15 @@ class PrivacySettingsFragment : DSLSettingsFragment(R.string.preferences__privac
236268

237269
clickPref(
238270
title = DSLSettingsText.from(R.string.preferences__inactivity_timeout_interval),
271+
summary = DSLSettingsText.from(getScreenLockInactivityTimeoutSummary(60 * state.obsoletePasswordTimeout.toLong())), // JW
239272
onClick = {
240273
childFragmentManager.clearFragmentResult(TimeDurationPickerDialog.RESULT_DURATION)
241274
childFragmentManager.clearFragmentResultListener(TimeDurationPickerDialog.RESULT_DURATION)
242275
childFragmentManager.setFragmentResultListener(TimeDurationPickerDialog.RESULT_DURATION, this@PrivacySettingsFragment) { _, bundle ->
243276
val timeout = bundle.getLong(TimeDurationPickerDialog.RESULT_KEY_DURATION_MILLISECONDS).milliseconds.inWholeMinutes.toInt()
244277
viewModel.setObsoletePasswordTimeout(max(timeout, 1))
245278
}
246-
TimeDurationPickerDialog.create(state.screenLockActivityTimeout.seconds).show(childFragmentManager, null)
279+
TimeDurationPickerDialog.create(state.obsoletePasswordTimeout.seconds * 60).show(childFragmentManager, null) // JW
247280
}
248281
)
249282
} else {
@@ -255,7 +288,7 @@ class PrivacySettingsFragment : DSLSettingsFragment(R.string.preferences__privac
255288
isChecked = state.screenLock && isKeyguardSecure,
256289
isEnabled = isKeyguardSecure,
257290
onClick = {
258-
viewModel.setScreenLockEnabled(!state.screenLock)
291+
viewModel.setOnlyScreenlockEnabled(!state.screenLock) // JW: changed
259292

260293
val intent = Intent(requireContext(), KeyCachingService::class.java)
261294
intent.action = KeyCachingService.LOCK_TOGGLED_EVENT

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsState.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,7 @@ data class PrivacySettingsState(
1313
val isObsoletePasswordTimeoutEnabled: Boolean,
1414
val obsoletePasswordTimeout: Int,
1515
val universalExpireTimer: Int
16+
// JW: added
17+
,
18+
val isProtectionMethodPassphrase: Boolean
1619
)

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsViewModel.kt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,41 @@ class PrivacySettingsViewModel(
7272
refresh()
7373
}
7474

75+
// JW: added
76+
fun setPassphraseEnabled(enabled: Boolean) {
77+
sharedPreferences.edit().putBoolean(TextSecurePreferences.DISABLE_PASSPHRASE_PREF, !enabled).apply()
78+
sharedPreferences.edit().putBoolean("pref_enable_passphrase_temporary", enabled).apply()
79+
sharedPreferences.edit().putBoolean(TextSecurePreferences.SCREEN_LOCK, !enabled).apply()
80+
refresh()
81+
}
82+
83+
// JW: added
84+
fun setOnlyScreenlockEnabled(enabled: Boolean) {
85+
sharedPreferences.edit().putBoolean(TextSecurePreferences.DISABLE_PASSPHRASE_PREF, true).apply()
86+
sharedPreferences.edit().putBoolean("pref_enable_passphrase_temporary", false).apply()
87+
sharedPreferences.edit().putBoolean(TextSecurePreferences.SCREEN_LOCK, enabled).apply()
88+
refresh()
89+
}
90+
91+
// JW: added
92+
fun setNoLock() {
93+
sharedPreferences.edit().putBoolean(TextSecurePreferences.DISABLE_PASSPHRASE_PREF, true).apply()
94+
sharedPreferences.edit().putBoolean("pref_enable_passphrase_temporary", false).apply()
95+
sharedPreferences.edit().putBoolean(TextSecurePreferences.SCREEN_LOCK, false).apply()
96+
refresh()
97+
}
98+
99+
// JW: added method.
100+
fun isPassphraseSelected(): Boolean {
101+
// Because this preference may be undefined when this app is first ran we also check if there is a passphrase
102+
// defined, if so, we assume passphrase protection:
103+
val myContext = AppDependencies.application
104+
105+
return TextSecurePreferences.isProtectionMethodPassphrase(myContext) ||
106+
TextSecurePreferences.getBooleanPreference(myContext, "pref_enable_passphrase_temporary", false) &&
107+
!TextSecurePreferences.isPasswordDisabled(myContext)
108+
}
109+
75110
fun refresh() {
76111
store.update(this::updateState)
77112
}
@@ -90,6 +125,9 @@ class PrivacySettingsViewModel(
90125
isObsoletePasswordTimeoutEnabled = TextSecurePreferences.isPassphraseTimeoutEnabled(AppDependencies.application),
91126
obsoletePasswordTimeout = TextSecurePreferences.getPassphraseTimeoutInterval(AppDependencies.application),
92127
universalExpireTimer = SignalStore.settings.universalExpireTimer
128+
// JW: added
129+
,
130+
isProtectionMethodPassphrase = TextSecurePreferences.isProtectionMethodPassphrase(AppDependencies.application)
93131
)
94132
}
95133

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsFragment.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,17 @@ class AdvancedPrivacySettingsFragment : DSLSettingsFragment(R.string.preferences
110110
viewModel.setAlwaysRelayCalls(!state.alwaysRelayCalls)
111111
}
112112

113+
// JW: added
114+
switchPref(
115+
title = DSLSettingsText.from(R.string.preferences_advanced__push_notifications_fcm),
116+
summary = DSLSettingsText.from(R.string.preferences_advanced__push_notifications_fcm_summary),
117+
isChecked = state.pushNotificationsViaFCM
118+
) {
119+
val isFcm = state.pushNotificationsViaFCM
120+
viewModel.setPushNotificationsViaFCM(!isFcm)
121+
FCMPreferenceFunctions.onFCMPreferenceChange(context, !isFcm)
122+
}
123+
113124
dividerPref()
114125

115126
sectionHeaderPref(R.string.preferences_communication__category_censorship_circumvention)

0 commit comments

Comments
 (0)