From 6b1e48e4857933b035e36c6253467b0a41ae8ce2 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 5 Feb 2020 17:11:12 -0500 Subject: [PATCH] Don't show the full-screen PIN megaphone. --- .../PassphraseRequiredActionBarActivity.java | 3 +- .../megaphone/BasicMegaphoneView.java | 4 +-- .../securesms/megaphone/Megaphone.java | 4 +++ .../securesms/megaphone/Megaphones.java | 8 ++---- .../megaphone/PinsForAllSchedule.java | 28 +++++++++++++------ .../RegistrationCompleteFragment.java | 3 +- .../securesms/util/CensorshipUtil.java | 16 +++++++++++ .../megaphone/PinsForAllScheduleTest.java | 6 ++++ 8 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/util/CensorshipUtil.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java index b5c9db1a72..f95e1ddf52 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java @@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity; import org.thoughtcrime.securesms.service.KeyCachingService; +import org.thoughtcrime.securesms.util.CensorshipUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.util.Locale; @@ -184,7 +185,7 @@ public abstract class PassphraseRequiredActionBarActivity extends BaseActionBarA } private boolean userMustSetKbsPin() { - return !SignalStore.registrationValues().isRegistrationComplete() && !PinUtil.userHasPin(this); + return !SignalStore.registrationValues().isRegistrationComplete() && !PinUtil.userHasPin(this) && !CensorshipUtil.isCensored(this); } private boolean userMustSetProfileName() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java index 09b218c035..9ac31c3902 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java @@ -77,7 +77,7 @@ public class BasicMegaphoneView extends FrameLayout { bodyText.setVisibility(GONE); } - if (megaphone.getButtonText() != 0) { + if (megaphone.hasButton()) { actionButton.setVisibility(VISIBLE); actionButton.setText(megaphone.getButtonText()); actionButton.setOnClickListener(v -> { @@ -99,7 +99,7 @@ public class BasicMegaphoneView extends FrameLayout { } }); } else { - actionButton.setVisibility(GONE); + snoozeButton.setVisibility(GONE); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java index 5c355e4690..de20adcdd2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java @@ -70,6 +70,10 @@ public class Megaphone { return buttonTextRes; } + public boolean hasButton() { + return buttonTextRes != 0; + } + public @Nullable EventListener getButtonClickListener() { return buttonListener; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index c949a6f344..a53e37e0f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -115,13 +115,9 @@ public final class Megaphones { long daysRemaining = PinsForAllSchedule.getDaysRemaining(record.getFirstVisible(), System.currentTimeMillis()); if (PinUtil.userHasPin(ApplicationDependencies.getApplication())) { - return buildPinsForAllMegaphoneForUserWithPin( - builder.enableSnooze((megaphone, listener) -> listener.onMegaphoneToastRequested(context.getString(R.string.KbsMegaphone__well_remind_you_later_confirming_your_pin, daysRemaining))) - ); + return buildPinsForAllMegaphoneForUserWithPin(builder.enableSnooze(null)); } else { - return buildPinsForAllMegaphoneForUserWithoutPin( - builder.enableSnooze((megaphone, listener) -> listener.onMegaphoneToastRequested(context.getString(R.string.KbsMegaphone__well_remind_you_later_creating_a_pin, daysRemaining))) - ); + return buildPinsForAllMegaphoneForUserWithoutPin(builder.enableSnooze(null)); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/PinsForAllSchedule.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/PinsForAllSchedule.java index dd165fc857..b08053d884 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/PinsForAllSchedule.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/PinsForAllSchedule.java @@ -1,9 +1,13 @@ package org.thoughtcrime.securesms.megaphone; +import android.content.Context; + import androidx.annotation.VisibleForTesting; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; +import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; +import org.thoughtcrime.securesms.util.CensorshipUtil; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; @@ -21,15 +25,17 @@ class PinsForAllSchedule implements MegaphoneSchedule { private final MegaphoneSchedule schedule = new RecurringSchedule(TimeUnit.DAYS.toMillis(2)); static boolean shouldDisplayFullScreen(long firstVisible, long currentTime) { - if (pinCreationFailedDuringRegistration()) { - return true; - } - - if (firstVisible == 0L) { - return false; - } else { - return currentTime - firstVisible >= TimeUnit.DAYS.toMillis(DAYS_UNTIL_FULLSCREEN); - } + return false; + // TODO [greyson] +// if (pinCreationFailedDuringRegistration()) { +// return true; +// } +// +// if (firstVisible == 0L) { +// return false; +// } else { +// return currentTime - firstVisible >= TimeUnit.DAYS.toMillis(DAYS_UNTIL_FULLSCREEN); +// } } static long getDaysRemaining(long firstVisible, long currentTime) { @@ -52,6 +58,10 @@ class PinsForAllSchedule implements MegaphoneSchedule { } private static boolean isEnabled() { + if (CensorshipUtil.isCensored(ApplicationDependencies.getApplication())) { + return false; + } + if (FeatureFlags.pinsForAllMegaphoneKillSwitch()) { return false; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java index 969110180f..50c2c033ba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java @@ -17,6 +17,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity; import org.thoughtcrime.securesms.lock.v2.PinUtil; import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; +import org.thoughtcrime.securesms.util.CensorshipUtil; import org.thoughtcrime.securesms.util.FeatureFlags; public final class RegistrationCompleteFragment extends BaseRegistrationFragment { @@ -41,7 +42,7 @@ public final class RegistrationCompleteFragment extends BaseRegistrationFragment next.putExtra(EditProfileActivity.SHOW_TOOLBAR, false); Context context = requireContext(); - if (FeatureFlags.pinsForAll() && !PinUtil.userHasPin(context)) { + if (FeatureFlags.pinsForAll() && !PinUtil.userHasPin(context) && !CensorshipUtil.isCensored(requireContext())) { activity.startActivity(chainIntents(CreateKbsPinActivity.getIntentForPinCreate(context), next)); } else { activity.startActivity(next); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/CensorshipUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/CensorshipUtil.java new file mode 100644 index 0000000000..418ddd8d3e --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/util/CensorshipUtil.java @@ -0,0 +1,16 @@ +package org.thoughtcrime.securesms.util; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; + +public final class CensorshipUtil { + + private CensorshipUtil() {} + + public static boolean isCensored(@NonNull Context context) { + return new SignalServiceNetworkAccess(context).isCensored(context); + } +} diff --git a/app/src/test/java/org/thoughtcrime/securesms/megaphone/PinsForAllScheduleTest.java b/app/src/test/java/org/thoughtcrime/securesms/megaphone/PinsForAllScheduleTest.java index 0312f0ba18..90eb87335e 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/megaphone/PinsForAllScheduleTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/megaphone/PinsForAllScheduleTest.java @@ -1,6 +1,9 @@ package org.thoughtcrime.securesms.megaphone; +import android.app.Application; + import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; @@ -36,6 +39,7 @@ public class PinsForAllScheduleTest { mockStatic(SignalStore.class); mockStatic(FeatureFlags.class); mockStatic(TextSecurePreferences.class); + when(ApplicationDependencies.getApplication()).thenReturn(mock(Application.class)); when(SignalStore.registrationValues()).thenReturn(registrationValues); when(SignalStore.kbsValues()).thenReturn(kbsValues); when(TextSecurePreferences.isV1RegistrationLockEnabled(any())).thenReturn(false); @@ -79,6 +83,8 @@ public class PinsForAllScheduleTest { } + // TODO [greyson] + @Ignore @Test public void givenFirstVisibleIsFullscreenTimeout_whenIShouldDisplayFullscreen_thenIExpectTrue() { // GIVEN