Add a feature flag system.

This commit is contained in:
Greyson Parrelli
2019-09-06 10:09:34 -04:00
parent a1245baf61
commit 70347e754c
4 changed files with 35 additions and 16 deletions

View File

@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.MediaConstraints; import org.thoughtcrime.securesms.mms.MediaConstraints;
import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.SingleLiveEvent;
import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -187,9 +188,11 @@ class MediaSendViewModel extends ViewModel {
buttonState = (recipient != null) ? ButtonState.SEND : ButtonState.CONTINUE; buttonState = (recipient != null) ? ButtonState.SEND : ButtonState.CONTINUE;
if (viewOnceState == ViewOnceState.GONE && viewOnceSupported()) { if (viewOnceState == ViewOnceState.GONE && viewOnceSupported()) {
// TODO[reveal] if (FeatureFlags.VIEW_ONCE_SENDING) {
// viewOnceState = TextSecurePreferences.isRevealableMessageEnabled(application) ? ViewOnceState.ENABLED : ViewOnceState.DISABLED; viewOnceState = TextSecurePreferences.isRevealableMessageEnabled(application) ? ViewOnceState.ENABLED : ViewOnceState.DISABLED;
} else {
viewOnceState = ViewOnceState.GONE; viewOnceState = ViewOnceState.GONE;
}
} else if (!viewOnceSupported()) { } else if (!viewOnceSupported()) {
viewOnceState = ViewOnceState.GONE; viewOnceState = ViewOnceState.GONE;
} }
@@ -449,8 +452,7 @@ class MediaSendViewModel extends ViewModel {
} }
boolean isViewOnce() { boolean isViewOnce() {
// TODO[reveal] return FeatureFlags.VIEW_ONCE_SENDING && viewOnceState == ViewOnceState.ENABLED;
return false;
} }
private @NonNull List<Media> getSelectedMediaOrDefault() { private @NonNull List<Media> getSelectedMediaOrDefault() {
@@ -471,8 +473,7 @@ class MediaSendViewModel extends ViewModel {
} }
private HudState buildHudState() { private HudState buildHudState() {
// TODO[reveal] ViewOnceState updatedViewOnceState = FeatureFlags.VIEW_ONCE_SENDING ? viewOnceState : ViewOnceState.GONE;
ViewOnceState updatedViewOnceState = ViewOnceState.GONE;
List<Media> selectedMedia = getSelectedMediaOrDefault(); List<Media> selectedMedia = getSelectedMediaOrDefault();
int selectionCount = selectedMedia.size(); int selectionCount = selectedMedia.size();
ButtonState updatedButtonState = buttonState == ButtonState.COUNT && selectionCount == 0 ? ButtonState.GONE : buttonState; ButtonState updatedButtonState = buttonState == ButtonState.COUNT && selectionCount == 0 ? ButtonState.GONE : buttonState;

View File

@@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.database.model.StickerPackRecord;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.adapter.SectionedRecyclerViewAdapter; import org.thoughtcrime.securesms.util.adapter.SectionedRecyclerViewAdapter;
import org.thoughtcrime.securesms.util.adapter.StableIdGenerator; import org.thoughtcrime.securesms.util.adapter.StableIdGenerator;
@@ -222,10 +223,11 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
actionButtonImage.setImageResource(R.drawable.ic_x); actionButtonImage.setImageResource(R.drawable.ic_x);
actionButton.setOnClickListener(v -> eventListener.onStickerPackUninstallClicked(stickerPack.getPackId(), stickerPack.getPackKey())); actionButton.setOnClickListener(v -> eventListener.onStickerPackUninstallClicked(stickerPack.getPackId(), stickerPack.getPackKey()));
// TODO [Stickers]: Re-enable later if (FeatureFlags.STICKERS_SHARING) {
// shareButton.setVisibility(View.VISIBLE); shareButton.setVisibility(View.VISIBLE);
// shareButtonImage.setVisibility(View.VISIBLE); shareButtonImage.setVisibility(View.VISIBLE);
// shareButton.setOnClickListener(v -> eventListener.onStickerPackShareClicked(stickerPack.getPackId(), stickerPack.getPackKey())); shareButton.setOnClickListener(v -> eventListener.onStickerPackShareClicked(stickerPack.getPackId(), stickerPack.getPackKey()));
}
} else { } else {
actionButtonImage.setImageResource(R.drawable.ic_arrow_down); actionButtonImage.setImageResource(R.drawable.ic_arrow_down);
actionButton.setOnClickListener(v -> eventListener.onStickerPackInstallClicked(stickerPack.getPackId(), stickerPack.getPackKey())); actionButton.setOnClickListener(v -> eventListener.onStickerPackInstallClicked(stickerPack.getPackId(), stickerPack.getPackKey()));
@@ -235,9 +237,10 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
shareButton.setOnClickListener(null); shareButton.setOnClickListener(null);
} }
// TODO [Stickers]: Delete later if (!FeatureFlags.STICKERS_SHARING) {
shareButton.setVisibility(View.GONE); shareButton.setVisibility(View.GONE);
shareButtonImage.setVisibility(View.GONE); shareButtonImage.setVisibility(View.GONE);
}
itemView.setOnClickListener(v -> eventListener.onStickerPackClicked(stickerPack.getPackId(), stickerPack.getPackKey())); itemView.setOnClickListener(v -> eventListener.onStickerPackClicked(stickerPack.getPackId(), stickerPack.getPackKey()));
} }

View File

@@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.stickers.StickerManifest.Sticker; import org.thoughtcrime.securesms.stickers.StickerManifest.Sticker;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import org.whispersystems.libsignal.util.Pair; import org.whispersystems.libsignal.util.Pair;
@@ -147,8 +148,9 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActionBa
if (manifest.isPresent()) { if (manifest.isPresent()) {
presentManifest(manifest.get().getManifest()); presentManifest(manifest.get().getManifest());
presentButton(manifest.get().isInstalled()); presentButton(manifest.get().isInstalled());
// TODO [Stickers]: Re-enable later if (FeatureFlags.STICKERS_SHARING) {
// presentShareButton(manifest.get().isInstalled(), manifest.get().getManifest().getPackId(), manifest.get().getManifest().getPackKey()); presentShareButton(manifest.get().isInstalled(), manifest.get().getManifest().getPackId(), manifest.get().getManifest().getPackKey());
}
} else { } else {
presentError(); presentError();
} }

View File

@@ -0,0 +1,13 @@
package org.thoughtcrime.securesms.util;
/**
* A location for constants that allows us to turn features on and off during development.
* After a feature has been launched, the flag should be removed.
*/
public class FeatureFlags {
/** Support for sharing stickers. */
public static final boolean STICKERS_SHARING = false;
/** Send support for view-once photos. */
public static final boolean VIEW_ONCE_SENDING = false;
}