From 727175e4f4985a768b3aa88e84ffcc386acd6953 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 14 Jan 2021 19:22:47 -0500 Subject: [PATCH] Add 'constraints' and 'key preferences' sections to logs. --- .../securesms/PassphraseRequiredActivity.java | 6 ++-- .../logsubmit/LogSectionConstraints.java | 35 +++++++++++++++++++ .../logsubmit/LogSectionKeyPreferences.java | 29 +++++++++++++++ .../logsubmit/LogSectionSystemInfo.java | 2 ++ .../logsubmit/SubmitDebugLogRepository.java | 2 ++ .../securesms/service/KeyCachingService.java | 8 ++++- 6 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java create mode 100644 app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionKeyPreferences.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java index 8b0fa7c6d..d4fe50606 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java @@ -232,8 +232,10 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements this.clearKeyReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - Log.i(TAG, "onReceive() for clear key event"); - onMasterSecretCleared(); + Log.i(TAG, "onReceive() for clear key event. PasswordDisabled: " + TextSecurePreferences.isPasswordDisabled(context) + ", ScreenLock: " + TextSecurePreferences.isScreenLockEnabled(context)); + if (TextSecurePreferences.isScreenLockEnabled(context) || !TextSecurePreferences.isPasswordDisabled(context)) { + onMasterSecretCleared(); + } } }; diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java new file mode 100644 index 000000000..1f8ae12dc --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java @@ -0,0 +1,35 @@ +package org.thoughtcrime.securesms.logsubmit; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import com.annimon.stream.Stream; + +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; +import org.thoughtcrime.securesms.jobmanager.Constraint; +import org.thoughtcrime.securesms.jobs.JobManagerFactories; +import org.thoughtcrime.securesms.util.Util; + +import java.util.Map; + +final class LogSectionConstraints implements LogSection { + + @Override + public @NonNull String getTitle() { + return "CONSTRAINTS"; + } + + @Override + public @NonNull CharSequence getContent(@NonNull Context context) { + StringBuilder output = new StringBuilder(); + Map factories = JobManagerFactories.getConstraintFactories(ApplicationDependencies.getApplication()); + int keyLength = Stream.of(factories.keySet()).map(String::length).max(Integer::compareTo).orElse(0); + + for (Map.Entry entry : factories.entrySet()) { + output.append(Util.rightPad(entry.getKey(), keyLength)).append(": ").append(entry.getValue().create().isMet()).append("\n"); + } + + return output; + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionKeyPreferences.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionKeyPreferences.java new file mode 100644 index 000000000..c9976fe29 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionKeyPreferences.java @@ -0,0 +1,29 @@ +package org.thoughtcrime.securesms.logsubmit; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.thoughtcrime.securesms.util.Util; + +final class LogSectionKeyPreferences implements LogSection { + + @Override + public @NonNull String getTitle() { + return "KEY PREFERENCES"; + } + + @Override + public @NonNull CharSequence getContent(@NonNull Context context) { + return new StringBuilder().append("Screen Lock : ").append(TextSecurePreferences.isScreenLockEnabled(context)).append("\n") + .append("Screen Lock Timeout : ").append(TextSecurePreferences.getScreenLockTimeout(context)).append("\n") + .append("Password Disabled : ").append(TextSecurePreferences.isPasswordDisabled(context)).append("\n") + .append("WiFi SMS : ").append(TextSecurePreferences.isWifiSmsEnabled(context)).append("\n") + .append("Default SMS : ").append(Util.isDefaultSmsProvider(context)).append("\n") + .append("Prefer Contact Photos: ").append(SignalStore.settings().isPreferSystemContactPhotos()).append("\n") + .append("Call Bandwidth Mode : ").append(SignalStore.settings().getCallBandwidthMode()).append("\n") + .append("Client Deprecated : ").append(SignalStore.misc().isClientDeprecated()).append("\n"); + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java index b006fdf89..fcb2d9c46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java @@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.util.CensorshipUtil; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.VersionTracker; import java.util.Arrays; import java.util.LinkedHashMap; @@ -60,6 +61,7 @@ public class LogSectionSystemInfo implements LogSection { builder.append("Locale : ").append(Locale.getDefault().toString()).append("\n"); builder.append("Linked Devices: ").append(TextSecurePreferences.isMultiDevice(context)).append("\n"); builder.append("First Version : ").append(TextSecurePreferences.getFirstInstallVersion(context)).append("\n"); + builder.append("Days Installed: ").append(VersionTracker.getDaysSinceFirstInstalled(context)).append("\n"); builder.append("App : "); try { builder.append(pm.getApplicationLabel(pm.getApplicationInfo(context.getPackageName(), 0))) diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java index ad8501896..a31e2b1cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java @@ -54,12 +54,14 @@ public class SubmitDebugLogRepository { private static final List SECTIONS = new ArrayList() {{ add(new LogSectionSystemInfo()); add(new LogSectionJobs()); + add(new LogSectionConstraints()); if (Build.VERSION.SDK_INT >= 28) { add(new LogSectionPower()); } add(new LogSectionPin()); add(new LogSectionCapabilities()); add(new LogSectionFeatureFlags()); + add(new LogSectionKeyPreferences()); add(new LogSectionPermissions()); add(new LogSectionTrace()); add(new LogSectionThreads()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java b/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java index 8b415c78f..61b431dc3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java @@ -80,7 +80,13 @@ public class KeyCachingService extends Service { public KeyCachingService() {} public static synchronized boolean isLocked(Context context) { - return masterSecret == null && (!TextSecurePreferences.isPasswordDisabled(context) || TextSecurePreferences.isScreenLockEnabled(context)); + boolean locked = masterSecret == null && (!TextSecurePreferences.isPasswordDisabled(context) || TextSecurePreferences.isScreenLockEnabled(context)); + + if (locked) { + Log.d(TAG, "Locked! PasswordDisabled: " + TextSecurePreferences.isPasswordDisabled(context) + ", ScreenLock: " + TextSecurePreferences.isScreenLockEnabled(context)); + } + + return locked; } public static synchronized @Nullable MasterSecret getMasterSecret(Context context) {