2014-11-04 15:19:48 +01:00
|
|
|
package org.thoughtcrime.securesms.preferences;
|
|
|
|
|
2018-03-01 18:51:37 +01:00
|
|
|
import android.app.Activity;
|
2018-03-10 00:27:20 +01:00
|
|
|
import android.app.KeyguardManager;
|
2014-11-04 15:19:48 +01:00
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.os.Bundle;
|
2020-12-01 11:36:41 +01:00
|
|
|
|
2020-08-19 02:06:26 +02:00
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
import androidx.appcompat.app.AlertDialog;
|
|
|
|
import androidx.preference.Preference;
|
2014-11-04 15:19:48 +01:00
|
|
|
|
2017-09-21 20:27:53 +02:00
|
|
|
import org.thoughtcrime.securesms.ApplicationContext;
|
2018-03-04 20:35:37 +01:00
|
|
|
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
|
2018-03-01 18:51:37 +01:00
|
|
|
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
2014-11-04 15:19:48 +01:00
|
|
|
import org.thoughtcrime.securesms.service.KeyCachingService;
|
2021-01-19 00:48:02 +01:00
|
|
|
import org.session.libsession.utilities.TextSecurePreferences;
|
2014-11-04 15:19:48 +01:00
|
|
|
|
2014-12-13 01:07:02 +01:00
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
2018-03-10 00:27:20 +01:00
|
|
|
import mobi.upod.timedurationpicker.TimeDurationPickerDialog;
|
2019-10-07 01:52:59 +02:00
|
|
|
import network.loki.messenger.R;
|
2018-03-10 00:27:20 +01:00
|
|
|
|
2018-03-01 18:51:37 +01:00
|
|
|
public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment implements InjectableType {
|
2015-06-09 16:37:20 +02:00
|
|
|
|
2018-03-01 18:51:37 +01:00
|
|
|
@Override
|
|
|
|
public void onAttach(Activity activity) {
|
|
|
|
super.onAttach(activity);
|
|
|
|
ApplicationContext.getInstance(activity).injectDependencies(this);
|
|
|
|
}
|
|
|
|
|
2014-11-04 15:19:48 +01:00
|
|
|
@Override
|
|
|
|
public void onCreate(Bundle paramBundle) {
|
|
|
|
super.onCreate(paramBundle);
|
|
|
|
|
2018-03-04 20:35:37 +01:00
|
|
|
this.findPreference(TextSecurePreferences.SCREEN_LOCK).setOnPreferenceChangeListener(new ScreenLockListener());
|
|
|
|
this.findPreference(TextSecurePreferences.SCREEN_LOCK_TIMEOUT).setOnPreferenceClickListener(new ScreenLockTimeoutListener());
|
|
|
|
|
|
|
|
this.findPreference(TextSecurePreferences.READ_RECEIPTS_PREF).setOnPreferenceChangeListener(new ReadReceiptToggleListener());
|
2018-10-29 23:14:31 +01:00
|
|
|
this.findPreference(TextSecurePreferences.TYPING_INDICATORS).setOnPreferenceChangeListener(new TypingIndicatorsToggleListener());
|
2019-01-15 09:41:05 +01:00
|
|
|
this.findPreference(TextSecurePreferences.LINK_PREVIEWS).setOnPreferenceChangeListener(new LinkPreviewToggleListener());
|
2018-03-04 20:35:37 +01:00
|
|
|
|
|
|
|
initializeVisibility();
|
2014-11-04 15:19:48 +01:00
|
|
|
}
|
|
|
|
|
2017-09-21 03:10:44 +02:00
|
|
|
@Override
|
|
|
|
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
|
|
|
|
addPreferencesFromResource(R.xml.preferences_app_protection);
|
|
|
|
}
|
|
|
|
|
2014-11-04 15:19:48 +01:00
|
|
|
@Override
|
|
|
|
public void onResume() {
|
|
|
|
super.onResume();
|
2020-12-14 08:16:16 +01:00
|
|
|
if (TextSecurePreferences.isPasswordDisabled(getContext())) {
|
|
|
|
initializeScreenLockTimeoutSummary();
|
|
|
|
}
|
2014-12-13 01:07:02 +01:00
|
|
|
}
|
|
|
|
|
2018-03-04 20:35:37 +01:00
|
|
|
private void initializeScreenLockTimeoutSummary() {
|
|
|
|
long timeoutSeconds = TextSecurePreferences.getScreenLockTimeout(getContext());
|
|
|
|
long hours = TimeUnit.SECONDS.toHours(timeoutSeconds);
|
|
|
|
long minutes = TimeUnit.SECONDS.toMinutes(timeoutSeconds) - (TimeUnit.SECONDS.toHours(timeoutSeconds) * 60 );
|
|
|
|
long seconds = TimeUnit.SECONDS.toSeconds(timeoutSeconds) - (TimeUnit.SECONDS.toMinutes(timeoutSeconds) * 60);
|
|
|
|
|
|
|
|
findPreference(TextSecurePreferences.SCREEN_LOCK_TIMEOUT)
|
|
|
|
.setSummary(timeoutSeconds <= 0 ? getString(R.string.AppProtectionPreferenceFragment_none) :
|
|
|
|
String.format("%02d:%02d:%02d", hours, minutes, seconds));
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initializeVisibility() {
|
|
|
|
if (TextSecurePreferences.isPasswordDisabled(getContext())) {
|
|
|
|
KeyguardManager keyguardManager = (KeyguardManager)getContext().getSystemService(Context.KEYGUARD_SERVICE);
|
2019-03-20 23:09:27 +01:00
|
|
|
if (!keyguardManager.isKeyguardSecure()) {
|
2018-03-04 20:35:37 +01:00
|
|
|
((SwitchPreferenceCompat)findPreference(TextSecurePreferences.SCREEN_LOCK)).setChecked(false);
|
|
|
|
findPreference(TextSecurePreferences.SCREEN_LOCK).setEnabled(false);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
findPreference(TextSecurePreferences.SCREEN_LOCK).setVisible(false);
|
|
|
|
findPreference(TextSecurePreferences.SCREEN_LOCK_TIMEOUT).setVisible(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private class ScreenLockListener implements Preference.OnPreferenceChangeListener {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
2018-04-20 02:41:21 +02:00
|
|
|
boolean enabled = (Boolean)newValue;
|
2019-10-07 01:52:59 +02:00
|
|
|
|
2018-04-20 02:41:21 +02:00
|
|
|
TextSecurePreferences.setScreenLockEnabled(getContext(), enabled);
|
2018-03-04 20:35:37 +01:00
|
|
|
|
|
|
|
Intent intent = new Intent(getContext(), KeyCachingService.class);
|
2018-04-20 02:41:21 +02:00
|
|
|
intent.setAction(KeyCachingService.LOCK_TOGGLED_EVENT);
|
2018-03-04 20:35:37 +01:00
|
|
|
getContext().startService(intent);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-10 00:27:20 +01:00
|
|
|
private class ScreenLockTimeoutListener implements Preference.OnPreferenceClickListener {
|
2018-03-04 20:35:37 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
2018-03-10 00:27:20 +01:00
|
|
|
new TimeDurationPickerDialog(getContext(), (view, duration) -> {
|
|
|
|
if (duration == 0) {
|
|
|
|
TextSecurePreferences.setScreenLockTimeout(getContext(), 0);
|
|
|
|
} else {
|
2021-04-20 09:02:14 +02:00
|
|
|
long timeoutSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
|
2018-03-10 00:27:20 +01:00
|
|
|
TextSecurePreferences.setScreenLockTimeout(getContext(), timeoutSeconds);
|
|
|
|
}
|
2018-03-04 20:35:37 +01:00
|
|
|
|
2018-03-10 00:27:20 +01:00
|
|
|
initializeScreenLockTimeoutSummary();
|
|
|
|
}, 0).show();
|
2018-03-04 20:35:37 +01:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-01 18:51:37 +01:00
|
|
|
private class ReadReceiptToggleListener implements Preference.OnPreferenceChangeListener {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-10-29 23:14:31 +01:00
|
|
|
private class TypingIndicatorsToggleListener implements Preference.OnPreferenceChangeListener {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
boolean enabled = (boolean)newValue;
|
2019-10-07 01:52:59 +02:00
|
|
|
|
2018-10-29 23:14:31 +01:00
|
|
|
if (!enabled) {
|
|
|
|
ApplicationContext.getInstance(requireContext()).getTypingStatusRepository().clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-15 09:41:05 +01:00
|
|
|
private class LinkPreviewToggleListener implements Preference.OnPreferenceChangeListener {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
2014-11-04 15:19:48 +01:00
|
|
|
}
|