Skip to content

Commit

Permalink
Refresh onboarding cards.
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-signal authored and nicholas-signal committed Mar 3, 2023
1 parent 6bc5b19 commit a9c4fcf
Show file tree
Hide file tree
Showing 12 changed files with 123 additions and 613 deletions.
Expand Up @@ -4,17 +4,13 @@

import androidx.annotation.NonNull;

import org.thoughtcrime.securesms.util.LocaleFeatureFlags;
import org.thoughtcrime.securesms.util.Util;

import java.util.Collections;
import java.util.List;

public final class OnboardingValues extends SignalStoreValues {

private static final String SHOW_NEW_GROUP = "onboarding.new_group";
private static final String SHOW_INVITE_FRIENDS = "onboarding.invite_friends";
private static final String SHOW_SMS = "onboarding.sms";
private static final String SHOW_APPEARANCE = "onboarding.appearance";
private static final String SHOW_ADD_PHOTO = "onboarding.add_photo";

Expand All @@ -26,7 +22,6 @@ public final class OnboardingValues extends SignalStoreValues {
void onFirstEverAppLaunch() {
putBoolean(SHOW_NEW_GROUP, true);
putBoolean(SHOW_INVITE_FRIENDS, true);
putBoolean(SHOW_SMS, true);
putBoolean(SHOW_APPEARANCE, true);
putBoolean(SHOW_ADD_PHOTO, true);
}
Expand All @@ -39,15 +34,13 @@ void onFirstEverAppLaunch() {
public void clearAll() {
setShowNewGroup(false);
setShowInviteFriends(false);
setShowSms(false);
setShowAppearance(false);
setShowAddPhoto(false);
}

public boolean hasOnboarding(@NonNull Context context) {
return shouldShowNewGroup() ||
shouldShowInviteFriends() ||
shouldShowSms() ||
shouldShowAppearance() ||
shouldShowAddPhoto();
}
Expand All @@ -68,14 +61,6 @@ public boolean shouldShowInviteFriends() {
return getBoolean(SHOW_INVITE_FRIENDS, false);
}

public void setShowSms(boolean value) {
putBoolean(SHOW_SMS, value);
}

public boolean shouldShowSms() {
return false;
}

public void setShowAppearance(boolean value) {
putBoolean(SHOW_APPEARANCE, value);
}
Expand All @@ -88,7 +73,7 @@ public void setShowAddPhoto(boolean value) {
putBoolean(SHOW_ADD_PHOTO, value);
}

public boolean shouldShowAddPhoto(){
public boolean shouldShowAddPhoto() {
return getBoolean(SHOW_ADD_PHOTO, false);
}
}
Expand Up @@ -7,23 +7,21 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.InviteActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversationlist.ConversationListFragment;
import org.thoughtcrime.securesms.databinding.OnboardingMegaphoneCardBinding;
import org.thoughtcrime.securesms.groups.ui.creategroup.CreateGroupActivity;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.profiles.manage.ManageProfileActivity;
import org.thoughtcrime.securesms.util.SmsUtil;
import org.thoughtcrime.securesms.wallpaper.ChatWallpaperActivity;

import java.util.ArrayList;
Expand Down Expand Up @@ -56,17 +54,15 @@ private void initialize(@NonNull Context context) {
}

public void present(@NonNull Megaphone megaphone, @NonNull MegaphoneActionController listener) {
this.cardList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
this.cardList.setAdapter(new CardAdapter(getContext(), listener));
}

private static class CardAdapter extends RecyclerView.Adapter<CardViewHolder> implements ActionClickListener {

private static final int TYPE_GROUP = 0;
private static final int TYPE_INVITE = 1;
private static final int TYPE_SMS = 2;
private static final int TYPE_APPEARANCE = 3;
private static final int TYPE_ADD_PHOTO = 4;
private static final int TYPE_APPEARANCE = 2;
private static final int TYPE_ADD_PHOTO = 3;

private final Context context;
private final MegaphoneActionController controller;
Expand All @@ -75,7 +71,7 @@ private static class CardAdapter extends RecyclerView.Adapter<CardViewHolder> im
CardAdapter(@NonNull Context context, @NonNull MegaphoneActionController controller) {
this.context = context;
this.controller = controller;
this.data = buildData(context);
this.data = buildData();

if (data.isEmpty()) {
Log.i(TAG, "Nothing to show (constructor)! Considering megaphone completed.");
Expand All @@ -97,11 +93,10 @@ public long getItemId(int position) {

@Override
public @NonNull CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.onboarding_megaphone_list_item, parent, false);
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.onboarding_megaphone_card, parent, false);
switch (viewType) {
case TYPE_GROUP: return new GroupCardViewHolder(view);
case TYPE_INVITE: return new InviteCardViewHolder(view);
case TYPE_SMS: return new SmsCardViewHolder(view);
case TYPE_APPEARANCE: return new AppearanceCardViewHolder(view);
case TYPE_ADD_PHOTO: return new AddPhotoCardViewHolder(view);
default: throw new IllegalStateException("Invalid viewType! " + viewType);
Expand All @@ -121,15 +116,15 @@ public int getItemCount() {
@Override
public void onClick() {
data.clear();
data.addAll(buildData(context));
data.addAll(buildData());
if (data.isEmpty()) {
Log.i(TAG, "Nothing to show! Considering megaphone completed.");
controller.onMegaphoneCompleted(Megaphones.Event.ONBOARDING);
}
notifyDataSetChanged();
}

private static List<Integer> buildData(@NonNull Context context) {
private static List<Integer> buildData() {
List<Integer> data = new ArrayList<>();

if (SignalStore.onboarding().shouldShowNewGroup()) {
Expand All @@ -148,10 +143,6 @@ private static List<Integer> buildData(@NonNull Context context) {
data.add(TYPE_APPEARANCE);
}

if (SignalStore.onboarding().shouldShowSms()) {
data.add(TYPE_SMS);
}

return data;
}
}
Expand All @@ -161,32 +152,30 @@ private interface ActionClickListener {
}

private static abstract class CardViewHolder extends RecyclerView.ViewHolder {
private final ImageView image;
private final TextView actionButton;
private final View closeButton;
private final OnboardingMegaphoneCardBinding binding;

public CardViewHolder(@NonNull View itemView) {
super(itemView);
this.image = itemView.findViewById(R.id.onboarding_megaphone_item_image);
this.actionButton = itemView.findViewById(R.id.onboarding_megaphone_item_button);
this.closeButton = itemView.findViewById(R.id.onboarding_megaphone_item_close);
binding = OnboardingMegaphoneCardBinding.bind(itemView);
}

public void bind(@NonNull ActionClickListener listener, @NonNull MegaphoneActionController controller) {
image.setImageResource(getImageRes());
actionButton.setText(getButtonStringRes());
actionButton.setOnClickListener(v -> {
binding.getRoot().setCardBackgroundColor(ContextCompat.getColor(binding.getRoot().getContext(), getBackgroundColor()));
binding.icon.setImageResource(getImageRes());
binding.text.setText(getButtonStringRes());
binding.getRoot().setOnClickListener(v -> {
onActionClicked(controller);
listener.onClick();
});
closeButton.setOnClickListener(v -> {
binding.close.setOnClickListener(v -> {
onCloseClicked();
listener.onClick();
});
}

abstract @StringRes int getButtonStringRes();
abstract @DrawableRes int getImageRes();
abstract @ColorRes int getBackgroundColor();
abstract void onActionClicked(@NonNull MegaphoneActionController controller);
abstract void onCloseClicked();
}
Expand All @@ -204,7 +193,12 @@ int getButtonStringRes() {

@Override
int getImageRes() {
return R.drawable.ic_megaphone_start_group;
return R.drawable.symbol_group_24;
}

@Override
int getBackgroundColor() {
return R.color.onboarding_background_1;
}

@Override
Expand All @@ -231,46 +225,22 @@ int getButtonStringRes() {

@Override
int getImageRes() {
return R.drawable.ic_megaphone_invite_friends;
return R.drawable.symbol_invite_24;
}

@Override
void onActionClicked(@NonNull MegaphoneActionController controller) {
controller.onMegaphoneNavigationRequested(new Intent(controller.getMegaphoneActivity(), InviteActivity.class));
}

@Override
void onCloseClicked() {
SignalStore.onboarding().setShowInviteFriends(false);
}
}

private static class SmsCardViewHolder extends CardViewHolder {

public SmsCardViewHolder(@NonNull View itemView) {
super(itemView);
}

@Override
int getButtonStringRes() {
return R.string.Megaphones_use_sms;
}

@Override
int getImageRes() {
return R.drawable.ic_megaphone_use_sms;
int getBackgroundColor() {
return R.color.onboarding_background_2;
}

@Override
void onActionClicked(@NonNull MegaphoneActionController controller) {
Intent intent = SmsUtil.getSmsRoleIntent(controller.getMegaphoneActivity());
controller.onMegaphoneNavigationRequested(intent, ConversationListFragment.SMS_ROLE_REQUEST_CODE);
SignalStore.onboarding().setShowSms(false);
controller.onMegaphoneNavigationRequested(new Intent(controller.getMegaphoneActivity(), InviteActivity.class));
}

@Override
void onCloseClicked() {
SignalStore.onboarding().setShowSms(false);
SignalStore.onboarding().setShowInviteFriends(false);
}
}

Expand All @@ -282,12 +252,17 @@ public AppearanceCardViewHolder(@NonNull View itemView) {

@Override
int getButtonStringRes() {
return R.string.Megaphones_appearance;
return R.string.Megaphones_chat_colors;
}

@Override
int getImageRes() {
return R.drawable.ic_signal_appearance;
return R.drawable.ic_color_24;
}

@Override
int getBackgroundColor() {
return R.color.onboarding_background_3;
}

@Override
Expand All @@ -310,12 +285,17 @@ public AddPhotoCardViewHolder(@NonNull View itemView) {

@Override
int getButtonStringRes() {
return R.string.Megaphones_add_photo;
return R.string.Megaphones_add_a_profile_photo;
}

@Override
int getImageRes() {
return R.drawable.ic_signal_add_photo;
return R.drawable.symbol_person_circle_24;
}

@Override
int getBackgroundColor() {
return R.color.onboarding_background_4;
}

@Override
Expand Down

0 comments on commit a9c4fcf

Please sign in to comment.