diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index 099c18665..612c86d0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -74,8 +74,8 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter ) clickPref( - title = DSLSettingsText.from(R.string.preferences__internal_refresh_remote_values), - summary = DSLSettingsText.from(R.string.preferences__internal_refresh_remote_values_description), + title = DSLSettingsText.from(R.string.preferences__internal_refresh_remote_config), + summary = DSLSettingsText.from(R.string.preferences__internal_refresh_remote_config_description), onClick = { refreshRemoteValues() } @@ -83,7 +83,7 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter dividerPref() - sectionHeaderPref(R.string.preferences__internal_display) + sectionHeaderPref(R.string.preferences__internal_misc) switchPref( title = DSLSettingsText.from(R.string.preferences__internal_user_details), @@ -94,6 +94,15 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter } ) + switchPref( + title = DSLSettingsText.from(R.string.preferences__internal_shake_to_report), + summary = DSLSettingsText.from(R.string.preferences__internal_shake_to_report_description), + isChecked = state.shakeToReport, + onClick = { + viewModel.setShakeToReport(!state.shakeToReport) + } + ) + dividerPref() sectionHeaderPref(R.string.preferences__internal_storage_service) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt index c18a3894b..416a15415 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsState.kt @@ -4,6 +4,7 @@ import org.thoughtcrime.securesms.emoji.EmojiFiles data class InternalSettingsState( val seeMoreUserDetails: Boolean, + val shakeToReport: Boolean, val gv2doNotCreateGv2Groups: Boolean, val gv2forceInvites: Boolean, val gv2ignoreServerChanges: Boolean, diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt index bc205340e..7c57d8d61 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt @@ -25,6 +25,11 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito refresh() } + fun setShakeToReport(enabled: Boolean) { + preferenceDataStore.putBoolean(InternalValues.SHAKE_TO_REPORT, enabled) + refresh() + } + fun setGv2DoNotCreateGv2Groups(enabled: Boolean) { preferenceDataStore.putBoolean(InternalValues.GV2_DO_NOT_CREATE_GV2, enabled) refresh() @@ -86,6 +91,7 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito private fun getState() = InternalSettingsState( seeMoreUserDetails = SignalStore.internalValues().recipientDetails(), + shakeToReport = SignalStore.internalValues().shakeToReport(), gv2doNotCreateGv2Groups = SignalStore.internalValues().gv2DoNotCreateGv2Groups(), gv2forceInvites = SignalStore.internalValues().gv2ForceInvites(), gv2ignoreServerChanges = SignalStore.internalValues().gv2IgnoreServerChanges(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java index 0f7710f2d..69ad958d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java @@ -23,6 +23,7 @@ public final class InternalValues extends SignalStoreValues { public static final String REMOVE_SENDER_KEY_MINIMUM = "internal.remove_sender_key_minimum"; public static final String DELAY_RESENDS = "internal.delay_resends"; public static final String CALLING_SERVER = "internal.calling_server"; + public static final String SHAKE_TO_REPORT = "internal.shake_to_report"; InternalValues(KeyValueStore store) { super(store); @@ -123,6 +124,13 @@ public final class InternalValues extends SignalStoreValues { return FeatureFlags.internalUser() && getBoolean(GV2_DISABLE_AUTOMIGRATE_NOTIFICATION, false); } + /** + * Whether or not "shake to report" is enabled. + */ + public synchronized boolean shakeToReport() { + return FeatureFlags.internalUser() && getBoolean(SHAKE_TO_REPORT, true); + } + /** * The selected group calling server to use. *
diff --git a/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java b/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java
index 8265a658a..bbf56a518 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java
@@ -8,12 +8,15 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
import org.signal.core.util.ShakeDetector;
import org.signal.core.util.ThreadUtil;
import org.signal.core.util.logging.Log;
import org.signal.core.util.tracing.Tracer;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
+import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogRepository;
import org.thoughtcrime.securesms.sharing.ShareIntents;
import org.thoughtcrime.securesms.util.FeatureFlags;
@@ -42,25 +45,27 @@ public final class ShakeToReport implements ShakeDetector.Listener {
}
public void enable() {
- if (!FeatureFlags.internalUser()) return;
+ if (!SignalStore.internalValues().shakeToReport()) return;
detector.start(ServiceUtil.getSensorManager(application));
}
public void disable() {
- if (!FeatureFlags.internalUser()) return;
+ if (!SignalStore.internalValues().shakeToReport()) return;
detector.stop();
}
public void registerActivity(@NonNull Activity activity) {
- if (!FeatureFlags.internalUser()) return;
+ if (!SignalStore.internalValues().shakeToReport()) return;
this.weakActivity = new WeakReference<>(activity);
}
@Override
public void onShakeDetected() {
+ if (!SignalStore.internalValues().shakeToReport()) return;
+
Activity activity = weakActivity.get();
if (activity == null) {
Log.w(TAG, "No registered activity!");
@@ -69,18 +74,18 @@ public final class ShakeToReport implements ShakeDetector.Listener {
disable();
- new AlertDialog.Builder(activity)
- .setTitle(R.string.ShakeToReport_shake_detected)
- .setMessage(R.string.ShakeToReport_submit_debug_log)
- .setNegativeButton(android.R.string.cancel, (d, i) -> {
- d.dismiss();
- enableIfVisible();
- })
- .setPositiveButton(R.string.ShakeToReport_submit, (d, i) -> {
- d.dismiss();
- submitLog(activity);
- })
- .show();
+ new MaterialAlertDialogBuilder(activity)
+ .setTitle(R.string.ShakeToReport_shake_detected)
+ .setMessage(R.string.ShakeToReport_submit_debug_log)
+ .setNegativeButton(android.R.string.cancel, (d, i) -> {
+ d.dismiss();
+ enableIfVisible();
+ })
+ .setPositiveButton(R.string.ShakeToReport_submit, (d, i) -> {
+ d.dismiss();
+ submitLog(activity);
+ })
+ .show();
}
private void submitLog(@NonNull Activity activity) {
@@ -106,22 +111,22 @@ public final class ShakeToReport implements ShakeDetector.Listener {
}
private void showPostSubmitDialog(@NonNull Activity activity, @NonNull String url) {
- AlertDialog dialog = new AlertDialog.Builder(activity)
- .setTitle(R.string.ShakeToReport_success)
- .setMessage(url)
- .setNegativeButton(android.R.string.cancel, (d, i) -> {
- d.dismiss();
- enableIfVisible();
- })
- .setPositiveButton(R.string.ShakeToReport_share, (d, i) -> {
- d.dismiss();
- enableIfVisible();
+ AlertDialog dialog = new MaterialAlertDialogBuilder(activity)
+ .setTitle(R.string.ShakeToReport_success)
+ .setMessage(url)
+ .setNegativeButton(android.R.string.cancel, (d, i) -> {
+ d.dismiss();
+ enableIfVisible();
+ })
+ .setPositiveButton(R.string.ShakeToReport_share, (d, i) -> {
+ d.dismiss();
+ enableIfVisible();
- activity.startActivity(new ShareIntents.Builder(activity)
- .setText(url)
- .build());
- })
- .show();
+ activity.startActivity(new ShareIntents.Builder(activity)
+ .setText(url)
+ .build());
+ })
+ .show();
((TextView) dialog.findViewById(android.R.id.message)).setTextIsSelectable(true);
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 22607d23b..2200e919f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2459,11 +2459,13 @@