Prevent internal shake to report dialog from showing after locking.

fork-5.53.8
Cody Henthorne 2022-02-22 15:36:35 -05:00 zatwierdzone przez Greyson Parrelli
rodzic bd18b731c8
commit aff0c43b39
1 zmienionych plików z 20 dodań i 16 usunięć

Wyświetl plik

@ -7,6 +7,8 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Lifecycle;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -36,7 +38,7 @@ public final class ShakeToReport implements ShakeDetector.Listener {
private final Application application; private final Application application;
private final ShakeDetector detector; private final ShakeDetector detector;
private WeakReference<Activity> weakActivity; private WeakReference<AppCompatActivity> weakActivity;
public ShakeToReport(@NonNull Application application) { public ShakeToReport(@NonNull Application application) {
this.application = application; this.application = application;
@ -56,7 +58,7 @@ public final class ShakeToReport implements ShakeDetector.Listener {
detector.stop(); detector.stop();
} }
public void registerActivity(@NonNull Activity activity) { public void registerActivity(@NonNull AppCompatActivity activity) {
if (!SignalStore.internalValues().shakeToReport()) return; if (!SignalStore.internalValues().shakeToReport()) return;
this.weakActivity = new WeakReference<>(activity); this.weakActivity = new WeakReference<>(activity);
@ -66,26 +68,28 @@ public final class ShakeToReport implements ShakeDetector.Listener {
public void onShakeDetected() { public void onShakeDetected() {
if (!SignalStore.internalValues().shakeToReport()) return; if (!SignalStore.internalValues().shakeToReport()) return;
Activity activity = weakActivity.get(); AppCompatActivity activity = weakActivity.get();
if (activity == null) { if (activity == null) {
Log.w(TAG, "No registered activity!"); Log.w(TAG, "No registered activity!");
return; return;
} }
disable(); if (activity.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
disable();
new MaterialAlertDialogBuilder(activity) new MaterialAlertDialogBuilder(activity)
.setTitle(R.string.ShakeToReport_shake_detected) .setTitle(R.string.ShakeToReport_shake_detected)
.setMessage(R.string.ShakeToReport_submit_debug_log) .setMessage(R.string.ShakeToReport_submit_debug_log)
.setNegativeButton(android.R.string.cancel, (d, i) -> { .setNegativeButton(android.R.string.cancel, (d, i) -> {
d.dismiss(); d.dismiss();
enableIfVisible(); enableIfVisible();
}) })
.setPositiveButton(R.string.ShakeToReport_submit, (d, i) -> { .setPositiveButton(R.string.ShakeToReport_submit, (d, i) -> {
d.dismiss(); d.dismiss();
submitLog(activity); submitLog(activity);
}) })
.show(); .show();
}
} }
private void submitLog(@NonNull Activity activity) { private void submitLog(@NonNull Activity activity) {