Revert to using a fixed delay for the onboarding.

This commit is contained in:
akwizgran
2019-01-14 17:36:07 +00:00
parent 226ed3dd73
commit 4b62c51fbf
2 changed files with 64 additions and 83 deletions

View File

@@ -1,7 +1,6 @@
package org.briarproject.briar.android.conversation; package org.briarproject.briar.android.conversation;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Observer; import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProvider;
import android.arch.lifecycle.ViewModelProviders; import android.arch.lifecycle.ViewModelProviders;
@@ -11,7 +10,6 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.annotation.UiThread; import android.support.annotation.UiThread;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
@@ -145,6 +143,9 @@ public class ConversationActivity extends BriarActivity
private static final Logger LOG = private static final Logger LOG =
Logger.getLogger(ConversationActivity.class.getName()); Logger.getLogger(ConversationActivity.class.getName());
private static final int TRANSITION_DURATION_MS = 500;
private static final int ONBOARDING_DELAY_MS = 250;
@Inject @Inject
AndroidNotificationManager notificationManager; AndroidNotificationManager notificationManager;
@Inject @Inject
@@ -178,8 +179,6 @@ public class ConversationActivity extends BriarActivity
volatile GroupInvitationManager groupInvitationManager; volatile GroupInvitationManager groupInvitationManager;
private final Map<MessageId, String> textCache = new ConcurrentHashMap<>(); private final Map<MessageId, String> textCache = new ConcurrentHashMap<>();
private final MutableLiveData<Boolean> canShowOnboarding =
new MutableLiveData<>();
private final Observer<String> contactNameObserver = name -> { private final Observer<String> contactNameObserver = name -> {
requireNonNull(name); requireNonNull(name);
loadMessages(); loadMessages();
@@ -208,6 +207,7 @@ public class ConversationActivity extends BriarActivity
// Spurious lint warning - using END causes a crash // Spurious lint warning - using END causes a crash
@SuppressLint("RtlHardcoded") @SuppressLint("RtlHardcoded")
Transition slide = new Slide(RIGHT); Transition slide = new Slide(RIGHT);
slide.setDuration(TRANSITION_DURATION_MS);
setSceneTransitionAnimation(slide, null, slide); setSceneTransitionAnimation(slide, null, slide);
} }
super.onCreate(state); super.onCreate(state);
@@ -242,8 +242,8 @@ public class ConversationActivity extends BriarActivity
requireNonNull(deleted); requireNonNull(deleted);
if (deleted) finish(); if (deleted) finish();
}); });
viewModel.getAddedPrivateMessage() viewModel.getAddedPrivateMessage().observe(this,
.observe(this, this::onAddedPrivateMessage); this::onAddedPrivateMessage);
setTransitionName(toolbarAvatar, getAvatarTransitionName(contactId)); setTransitionName(toolbarAvatar, getAvatarTransitionName(contactId));
setTransitionName(toolbarStatus, getBulbTransitionName(contactId)); setTransitionName(toolbarStatus, getBulbTransitionName(contactId));
@@ -723,28 +723,46 @@ public class ConversationActivity extends BriarActivity
private void showImageOnboarding(@Nullable Boolean show) { private void showImageOnboarding(@Nullable Boolean show) {
if (show == null || !show) return; if (show == null || !show) return;
if (SDK_INT >= 21) {
// show onboarding only after the enter transition has ended // show onboarding only after the enter transition has ended
// otherwise the tap target animation won't play // otherwise the tap target animation won't play
observeOnce(canShowOnboarding, this, canShow -> { textInputView.postDelayed(this::showImageOnboarding,
TRANSITION_DURATION_MS + ONBOARDING_DELAY_MS);
} else {
showImageOnboarding();
}
}
private void showImageOnboarding() {
// remove cast when removing FEATURE_FLAG_IMAGE_ATTACHMENTS // remove cast when removing FEATURE_FLAG_IMAGE_ATTACHMENTS
((TextAttachmentController) sendController) ((TextAttachmentController) sendController)
.showImageOnboarding(this, () -> .showImageOnboarding(this, () ->
viewModel.onImageOnboardingSeen()); viewModel.onImageOnboardingSeen());
});
} }
private void showIntroductionOnboarding(@Nullable Boolean show) { private void showIntroductionOnboarding(@Nullable Boolean show) {
if (show == null || !show) return; if (show == null || !show) return;
if (SDK_INT >= 21) {
// show onboarding only after the enter transition has ended // show onboarding only after the enter transition has ended
// otherwise the tap target animation won't play // otherwise the tap target animation won't play
observeOnce(canShowOnboarding, this, canShow -> { textInputView.postDelayed(this::showIntroductionOnboarding,
TRANSITION_DURATION_MS + ONBOARDING_DELAY_MS);
} else {
showIntroductionOnboarding();
}
}
private void showIntroductionOnboarding() {
// find view of overflow icon // find view of overflow icon
View target = null; View target = null;
for (int i = 0; i < toolbar.getChildCount(); i++) { for (int i = 0; i < toolbar.getChildCount(); i++) {
if (toolbar.getChildAt(i) instanceof ActionMenuView) { if (toolbar.getChildAt(i) instanceof ActionMenuView) {
ActionMenuView menu = ActionMenuView menu = (ActionMenuView) toolbar.getChildAt(i);
(ActionMenuView) toolbar.getChildAt(i); // The overflow icon should be the last child of the menu
target = menu.getChildAt(menu.getChildCount() - 1); target = menu.getChildAt(menu.getChildCount() - 1);
// If the menu hasn't been populated yet, use the menu itself
// as the target
if (target == null) target = menu;
break; break;
} }
} }
@@ -767,7 +785,6 @@ public class ConversationActivity extends BriarActivity
ContextCompat.getColor(this, R.color.briar_primary)) ContextCompat.getColor(this, R.color.briar_primary))
.setPromptStateChangeListener(listener) .setPromptStateChangeListener(listener)
.show(); .show();
});
} }
@Override @Override
@@ -919,39 +936,4 @@ public class ConversationActivity extends BriarActivity
return attachments; return attachments;
} }
@Override
@RequiresApi(api = 21)
public void setSceneTransitionAnimation(
@Nullable Transition enterTransition,
@Nullable Transition exitTransition,
@Nullable Transition returnTransition) {
super.setSceneTransitionAnimation(enterTransition, exitTransition,
returnTransition);
// workaround for MaterialTapTargetPrompt bug:
// https://github.com/sjwall/MaterialTapTargetPrompt/issues/147
getWindow().getEnterTransition().addListener(
new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
}
@Override
public void onTransitionEnd(Transition transition) {
canShowOnboarding.setValue(true);
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
}
} }

View File

@@ -231,8 +231,7 @@ public class TextAttachmentController extends TextSendController
R.style.OnboardingDialogTheme).setTarget(imageButton) R.style.OnboardingDialogTheme).setTarget(imageButton)
.setPrimaryText(R.string.dialog_title_image_support) .setPrimaryText(R.string.dialog_title_image_support)
.setSecondaryText(R.string.dialog_message_image_support) .setSecondaryText(R.string.dialog_message_image_support)
.setBackgroundColour( .setBackgroundColour(getColor(activity, R.color.briar_primary))
getColor(activity, R.color.briar_primary))
.setIcon(R.drawable.ic_image) .setIcon(R.drawable.ic_image)
.setIconDrawableColourFilter(color) .setIconDrawableColourFilter(color)
.setPromptStateChangeListener(listener) .setPromptStateChangeListener(listener)