Commit c247ce09 authored by Jordan Demeulenaere's avatar Jordan Demeulenaere Committed by Commit Bot

[Autofill Assistant] Header, Details, Carousel, PR coordinators are now...

[Autofill Assistant] Header, Details, Carousel, PR coordinators are now instantiated by BottomBarCoordinator.

Change-Id: Ia609f0ee4807c2fb9f58cba48e7c638f0ae094af
Reviewed-on: https://chromium-review.googlesource.com/c/1430087
Commit-Queue: Jordan Demeulenaere <jdemeulenaere@chromium.org>
Reviewed-by: default avatarStephane Zermatten <szermatt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#625293}
parent 171738ae
......@@ -12,6 +12,12 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill_assistant.carousel.AssistantCarouselCoordinator;
import org.chromium.chrome.browser.autofill_assistant.details.AssistantDetailsCoordinator;
import org.chromium.chrome.browser.autofill_assistant.header.AssistantHeaderCoordinator;
import org.chromium.chrome.browser.autofill_assistant.payment.AssistantPaymentRequestCoordinator;
/**
* Coordinator responsible for the Autofill Assistant bottom bar. This coordinator allows to enable
* or disable the swipeable behavior of the bottom bar and ensures that the bottom bar height is
......@@ -38,18 +44,21 @@ class AssistantBottomBarCoordinator {
private final int mChildrenVerticalSpacing;
private final int mBottomBarWithoutIndicatorPaddingTop;
// The child views.
private View mDetailsView;
private View mPaymentRequestView;
private View mCarouselView;
// Child coordinators.
private final AssistantHeaderCoordinator mHeaderCoordinator;
private final AssistantDetailsCoordinator mDetailsCoordinator;
private final AssistantPaymentRequestCoordinator mPaymentRequestCoordinator;
private final AssistantCarouselCoordinator mCarouselCoordinator;
AssistantBottomBarCoordinator(View assistantView, DisplayMetrics displayMetrics) {
AssistantBottomBarCoordinator(
ChromeActivity activity, View assistantView, AssistantModel model) {
mBottomBarView = assistantView.findViewById(
org.chromium.chrome.autofill_assistant.R.id.autofill_assistant_bottombar);
mSwipeIndicatorView = mBottomBarView.findViewById(
org.chromium.chrome.autofill_assistant.R.id.swipe_indicator);
mBottomBarBehavior = BottomSheetBehavior.from(mBottomBarView);
DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics();
mChildrenHorizontalMargin = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, CHILDREN_HORIZONTAL_MARGIN_DP, displayMetrics);
mDetailsOnlyVerticalMargin = (int) TypedValue.applyDimension(
......@@ -59,6 +68,26 @@ class AssistantBottomBarCoordinator {
mBottomBarWithoutIndicatorPaddingTop =
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
BOTTOM_BAR_WITHOUT_INDICATOR_PADDING_TOP_DP, displayMetrics);
// Instantiate child components.
mHeaderCoordinator =
new AssistantHeaderCoordinator(activity, mBottomBarView, model.getHeaderModel());
mDetailsCoordinator = new AssistantDetailsCoordinator(activity, model.getDetailsModel());
mPaymentRequestCoordinator = new AssistantPaymentRequestCoordinator(activity);
mCarouselCoordinator = new AssistantCarouselCoordinator(activity, model.getCarouselModel());
// Add child views to bottom bar.
mBottomBarView.addView(mDetailsCoordinator.getView());
mBottomBarView.addView(mPaymentRequestCoordinator.getView());
mBottomBarView.addView(mCarouselCoordinator.getView());
// Ensure the margin are computed correctly from the beginning.
onChildViewVisibilityChanged();
// Add child views visibility listener.
mDetailsCoordinator.setVisibilityChangedListener(this::onChildViewVisibilityChanged);
mPaymentRequestCoordinator.setVisibilityChangedListener(this::onChildViewVisibilityChanged);
mCarouselCoordinator.setVisibilityChangedListener(this::onChildViewVisibilityChanged);
}
/**
......@@ -69,35 +98,6 @@ class AssistantBottomBarCoordinator {
return mBottomBarView;
}
/**
* Set the details view to {@code detailsView}. This method should be called only once, before
* {@link #setPaymentRequestView} and {@link #setCarouselView}.
*/
public void setDetailsView(View detailsView) {
assert mDetailsView == null;
mDetailsView = detailsView;
mBottomBarView.addView(mDetailsView);
}
/**
* Set the payment request view to {@code paymentRequestView}. This method should be called only
* once, before {@link #setCarouselView}.
*/
public void setPaymentRequestView(View paymentRequestView) {
assert mPaymentRequestView == null;
mPaymentRequestView = paymentRequestView;
mBottomBarView.addView(mPaymentRequestView);
}
/**
* Set the carousel view to {@code carouselView}. This method should be called only once.
*/
public void setCarouselView(View carouselView) {
assert mCarouselView == null;
mCarouselView = carouselView;
mBottomBarView.addView(mCarouselView);
}
/**
* Make sure the bottom bar is expanded and text is visible.
*/
......@@ -122,6 +122,14 @@ class AssistantBottomBarCoordinator {
}
}
public AssistantPaymentRequestCoordinator getPaymentRequestCoordinator() {
return mPaymentRequestCoordinator;
}
public AssistantCarouselCoordinator getCarouselCoordinator() {
return mCarouselCoordinator;
}
private void setBottomBarPaddingTop(int paddingPx) {
mBottomBarView.setPadding(0, paddingPx, 0, 0);
}
......@@ -130,25 +138,28 @@ class AssistantBottomBarCoordinator {
* Called when one of its child views visibility has changed. This method set the margin of
* those views such that the height of the bottom bar is constant most of the time.
*/
public void onChildVisibilityChanged() {
boolean detailsVisible =
mDetailsView != null && mDetailsView.getVisibility() == View.VISIBLE;
private void onChildViewVisibilityChanged() {
View detailsView = mDetailsCoordinator.getView();
View carouselView = mCarouselCoordinator.getView();
View paymentRequestView = mPaymentRequestCoordinator.getView();
boolean detailsVisible = detailsView != null && detailsView.getVisibility() == View.VISIBLE;
boolean carouselVisible =
mCarouselView != null && mCarouselView.getVisibility() == View.VISIBLE;
carouselView != null && carouselView.getVisibility() == View.VISIBLE;
boolean paymentRequestVisible =
mPaymentRequestView != null && mPaymentRequestView.getVisibility() == View.VISIBLE;
paymentRequestView != null && paymentRequestView.getVisibility() == View.VISIBLE;
int topMargin = mChildrenVerticalSpacing;
if (detailsVisible) {
// Set details margins.
LinearLayout.LayoutParams detailsLayoutParams =
(LinearLayout.LayoutParams) mDetailsView.getLayoutParams();
(LinearLayout.LayoutParams) detailsView.getLayoutParams();
int detailsVerticalMargin = carouselVisible || paymentRequestVisible
? topMargin
: mDetailsOnlyVerticalMargin;
detailsLayoutParams.setMargins(mChildrenHorizontalMargin, detailsVerticalMargin,
mChildrenHorizontalMargin, detailsVerticalMargin);
mDetailsView.setLayoutParams(detailsLayoutParams);
detailsView.setLayoutParams(detailsLayoutParams);
topMargin = 0;
}
......@@ -156,10 +167,10 @@ class AssistantBottomBarCoordinator {
if (paymentRequestVisible) {
// Set payment request margins.
LinearLayout.LayoutParams paymentRequestLayoutParams =
(LinearLayout.LayoutParams) mPaymentRequestView.getLayoutParams();
(LinearLayout.LayoutParams) paymentRequestView.getLayoutParams();
paymentRequestLayoutParams.setMargins(mChildrenHorizontalMargin, topMargin,
mChildrenVerticalSpacing, mChildrenHorizontalMargin);
mPaymentRequestView.setLayoutParams(paymentRequestLayoutParams);
paymentRequestView.setLayoutParams(paymentRequestLayoutParams);
topMargin = 0;
}
......@@ -167,10 +178,10 @@ class AssistantBottomBarCoordinator {
if (carouselVisible) {
// Set carousel margins.
LinearLayout.LayoutParams carouselLayoutParams =
(LinearLayout.LayoutParams) mCarouselView.getLayoutParams();
(LinearLayout.LayoutParams) carouselView.getLayoutParams();
carouselLayoutParams.setMargins(
/* left= */ 0, topMargin, /* right= */ 0, mChildrenVerticalSpacing);
mCarouselView.setLayoutParams(carouselLayoutParams);
carouselView.setLayoutParams(carouselLayoutParams);
}
}
}
......@@ -11,11 +11,8 @@ import android.view.ViewGroup;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.autofill_assistant.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill_assistant.carousel.AssistantCarouselCoordinator;
import org.chromium.chrome.browser.autofill_assistant.details.AssistantDetails;
import org.chromium.chrome.browser.autofill_assistant.details.AssistantDetailsCoordinator;
import org.chromium.chrome.browser.autofill_assistant.header.AssistantHeaderCoordinator;
import org.chromium.chrome.browser.autofill_assistant.payment.AssistantPaymentRequestCoordinator;
import org.chromium.chrome.browser.autofill_assistant.header.AssistantHeaderModel;
import org.chromium.chrome.browser.help.HelpAndFeedback;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.snackbar.Snackbar;
......@@ -56,10 +53,6 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
private final View mAssistantView;
private final AssistantBottomBarCoordinator mBottomBarCoordinator;
private final AssistantHeaderCoordinator mHeaderCoordinator;
private final AssistantDetailsCoordinator mDetailsCoordinator;
private final AssistantPaymentRequestCoordinator mPaymentRequestCoordinator;
private final AssistantCarouselCoordinator mCarouselCoordinator;
private final AssistantKeyboardCoordinator mKeyboardCoordinator;
private final AssistantOverlayCoordinator mOverlayCoordinator;
......@@ -77,27 +70,11 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
.findViewById(R.id.autofill_assistant);
// Instantiate child components.
mBottomBarCoordinator = new AssistantBottomBarCoordinator(
mAssistantView, mActivity.getResources().getDisplayMetrics());
mHeaderCoordinator = new AssistantHeaderCoordinator(
mActivity, mBottomBarCoordinator.getView(), mModel.getHeaderModel());
mCarouselCoordinator = new AssistantCarouselCoordinator(mActivity,
mModel.getCarouselModel(), mBottomBarCoordinator::onChildVisibilityChanged);
mDetailsCoordinator = new AssistantDetailsCoordinator(mActivity, mModel.getDetailsModel(),
mBottomBarCoordinator::onChildVisibilityChanged);
mPaymentRequestCoordinator = new AssistantPaymentRequestCoordinator(
mActivity, mBottomBarCoordinator::onChildVisibilityChanged);
mBottomBarCoordinator =
new AssistantBottomBarCoordinator(mActivity, mAssistantView, mModel);
mKeyboardCoordinator = new AssistantKeyboardCoordinator(activity);
mOverlayCoordinator = new AssistantOverlayCoordinator(activity, mAssistantView, this);
// Attach child views to the bottom bar.
mBottomBarCoordinator.setDetailsView(mDetailsCoordinator.getView());
mBottomBarCoordinator.setPaymentRequestView(mPaymentRequestCoordinator.getView());
mBottomBarCoordinator.setCarouselView(mCarouselCoordinator.getView());
// PR is initially hidden.
mPaymentRequestCoordinator.setVisible(false);
showAssistantView();
}
......@@ -125,11 +102,11 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
// Hide everything except header.
mOverlayCoordinator.hide();
mModel.getDetailsModel().clearDetails();
mPaymentRequestCoordinator.setVisible(false);
mBottomBarCoordinator.getPaymentRequestCoordinator().setVisible(false);
mModel.getCarouselModel().clearChips();
if (showGiveUpMessage) {
mHeaderCoordinator.setStatusMessage(
mModel.getHeaderModel().set(AssistantHeaderModel.STATUS_MESSAGE,
mActivity.getString(R.string.autofill_assistant_give_up));
}
ThreadUtils.postOnUiThreadDelayed(this::shutdownImmediately, GRACEFUL_SHUTDOWN_DELAY_MS);
......@@ -149,8 +126,8 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
*/
public void showOnboarding(Runnable onAccept) {
// Hide header buttons.
mHeaderCoordinator.setFeedbackButtonVisible(false);
mHeaderCoordinator.setCloseButtonVisible(false);
mModel.getHeaderModel().set(AssistantHeaderModel.FEEDBACK_VISIBLE, false);
mModel.getHeaderModel().set(AssistantHeaderModel.CLOSE_VISIBLE, false);
// Show overlay to prevent user from interacting with the page during onboarding.
mOverlayCoordinator.showFullOverlay();
......@@ -163,8 +140,8 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
}
// Show header buttons.
mHeaderCoordinator.setFeedbackButtonVisible(true);
mHeaderCoordinator.setCloseButtonVisible(true);
mModel.getHeaderModel().set(AssistantHeaderModel.FEEDBACK_VISIBLE, true);
mModel.getHeaderModel().set(AssistantHeaderModel.CLOSE_VISIBLE, true);
// Hide overlay.
mOverlayCoordinator.hide();
......@@ -173,15 +150,6 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
});
}
/**
* Show {@code message} to the user, unless we are shutting down.
*/
public void showStatusMessage(String message) {
if (!mIsShuttingDownGracefully) {
mHeaderCoordinator.setStatusMessage(message);
}
}
/**
* Get the model representing the current state of the UI.
*/
......@@ -196,22 +164,6 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
return mBottomBarCoordinator;
}
public AssistantHeaderCoordinator getHeaderCoordinator() {
return mHeaderCoordinator;
}
public AssistantDetailsCoordinator getDetailsCoordinator() {
return mDetailsCoordinator;
}
public AssistantPaymentRequestCoordinator getPaymentRequestCoordinator() {
return mPaymentRequestCoordinator;
}
public AssistantCarouselCoordinator getCarouselCoordinator() {
return mCarouselCoordinator;
}
public AssistantKeyboardCoordinator getKeyboardCoordinator() {
return mKeyboardCoordinator;
}
......@@ -260,11 +212,12 @@ class AssistantCoordinator implements TouchEventFilterView.Delegate {
/**
* Show the Chrome feedback form.
*/
public void showFeedback(String debugContext, @Nullable AssistantDetails details) {
public void showFeedback(
String debugContext, @Nullable AssistantDetails details, String statusMessage) {
HelpAndFeedback.getInstance(mActivity).showFeedback(mActivity, Profile.getLastUsedProfile(),
mActivity.getActivityTab().getUrl(), FEEDBACK_CATEGORY_TAG,
FeedbackContext.buildContextString(mActivity, debugContext, details,
mHeaderCoordinator.getStatusMessage(), 4));
FeedbackContext.buildContextString(
mActivity, debugContext, details, statusMessage, 4));
}
// Implementation of methods from {@link TouchEventFilterView.Delegate}.
......
......@@ -173,7 +173,8 @@ class AutofillAssistantUiController implements AssistantCoordinator.Delegate {
paymentOptions.shippingType = shippingType;
mCoordinator.getBottomBarCoordinator().allowSwipingBottomSheet(false);
mCoordinator.getPaymentRequestCoordinator()
mCoordinator.getBottomBarCoordinator()
.getPaymentRequestCoordinator()
.reset(paymentOptions, supportedBasicCardNetworks, defaultEmail)
.then(this::onRequestPaymentInformationSuccess,
this::onRequestPaymentInformationFailed);
......@@ -204,8 +205,9 @@ class AutofillAssistantUiController implements AssistantCoordinator.Delegate {
}
@CalledByNative
private void showFeedback(String debugContext, @Nullable AssistantDetails details) {
mCoordinator.showFeedback(debugContext, details);
private void showFeedback(
String debugContext, @Nullable AssistantDetails details, String statusMessage) {
mCoordinator.showFeedback(debugContext, details, statusMessage);
}
@CalledByNative
......
......@@ -25,15 +25,13 @@ public class AssistantCarouselCoordinator {
private static final int CHIPS_INNER_SPACING_DP = 16;
private static final int CHIPS_OUTER_SPACING_DP = 24;
private final Runnable mOnVisibilityChanged;
@Nullable
private Runnable mOnVisibilityChanged;
private final LinearLayoutManager mLayoutManager;
private final RecyclerView mView;
public AssistantCarouselCoordinator(
Context context, AssistantCarouselModel model, Runnable onVisibilityChanged) {
mOnVisibilityChanged = onVisibilityChanged;
public AssistantCarouselCoordinator(Context context, AssistantCarouselModel model) {
mLayoutManager = new LinearLayoutManager(
context, LinearLayoutManager.HORIZONTAL, /* reverseLayout= */ false);
mView = new RecyclerView(context);
......@@ -100,10 +98,20 @@ public class AssistantCarouselCoordinator {
boolean changed = mView.getVisibility() != visibility;
if (changed) {
mView.setVisibility(visibility);
mOnVisibilityChanged.run();
if (mOnVisibilityChanged != null) {
mOnVisibilityChanged.run();
}
}
}
/**
* Set the listener that should be triggered when changing the listener of this coordinator
* view.
*/
public void setVisibilityChangedListener(Runnable listener) {
mOnVisibilityChanged = listener;
}
private class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private final int mInnerSpacePx;
private final int mOuterSpacePx;
......
......@@ -16,6 +16,7 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.media.ThumbnailUtils;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
import android.text.TextUtils;
......@@ -50,7 +51,8 @@ public class AssistantDetailsCoordinator {
private static final String DETAILS_DATE_FORMAT = "EEE, MMM d";
private final Context mContext;
private final Runnable mOnVisibilityChanged;
@Nullable
private Runnable mOnVisibilityChanged;
private final View mView;
private final GradientDrawable mDefaultImage;
......@@ -66,10 +68,8 @@ public class AssistantDetailsCoordinator {
private final Set<View> mViewsToAnimate = new HashSet<>();
private ValueAnimator mPulseAnimation;
public AssistantDetailsCoordinator(
ChromeActivity activity, AssistantDetailsModel model, Runnable onVisibilityChanged) {
public AssistantDetailsCoordinator(ChromeActivity activity, AssistantDetailsModel model) {
mContext = activity;
mOnVisibilityChanged = onVisibilityChanged;
mView = LayoutInflater.from(activity).inflate(
R.layout.autofill_assistant_details, /* root= */ null);
......@@ -118,10 +118,20 @@ public class AssistantDetailsCoordinator {
boolean changed = mView.getVisibility() != visibility;
if (changed) {
mView.setVisibility(visibility);
mOnVisibilityChanged.run();
if (mOnVisibilityChanged != null) {
mOnVisibilityChanged.run();
}
}
}
/**
* Set the listener that should be triggered when changing the listener of this coordinator
* view.
*/
public void setVisibilityChangedListener(Runnable listener) {
mOnVisibilityChanged = listener;
}
/**
* Update the details.
*/
......
......@@ -13,45 +13,11 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
* Coordinator for the header of the Autofill Assistant.
*/
public class AssistantHeaderCoordinator {
private final AssistantHeaderMediator mMediator;
public AssistantHeaderCoordinator(Context context, View root, AssistantHeaderModel model) {
// Bind view and mediator through the model.
AssistantHeaderViewBinder.ViewHolder viewHolder =
new AssistantHeaderViewBinder.ViewHolder(context, root);
AssistantHeaderViewBinder viewBinder = new AssistantHeaderViewBinder();
PropertyModelChangeProcessor.create(model, viewHolder, viewBinder);
mMediator = new AssistantHeaderMediator(model);
}
// TODO(crbug.com/806868): Remove all methods here and delete mediator once UI is modified only
// in native side.
/**
* Get the current status message.
*/
public String getStatusMessage() {
return mMediator.getCurrentStatusMessage();
}
/**
* Set the status message.
*/
public void setStatusMessage(String message) {
mMediator.setStatusMessage(message);
}
/**
* Show or hide the feedback button.
*/
public void setFeedbackButtonVisible(boolean visible) {
mMediator.setFeedbackButtonVisible(visible);
}
/**
* Show or hide the close button.
*/
public void setCloseButtonVisible(boolean visible) {
mMediator.setCloseButtonVisible(visible);
}
}
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.autofill_assistant.header;
/**
* Mediator that updates the model for the Autofill Assistant header.
*/
class AssistantHeaderMediator {
private final AssistantHeaderModel mModel;
AssistantHeaderMediator(AssistantHeaderModel model) {
mModel = model;
}
String getCurrentStatusMessage() {
return mModel.get(AssistantHeaderModel.STATUS_MESSAGE);
}
void setStatusMessage(String message) {
if (message != null && !message.isEmpty()) {
mModel.set(AssistantHeaderModel.STATUS_MESSAGE, message);
}
}
void setFeedbackButtonVisible(boolean visible) {
mModel.set(AssistantHeaderModel.FEEDBACK_VISIBLE, visible);
}
void setCloseButtonVisible(boolean visible) {
mModel.set(AssistantHeaderModel.CLOSE_VISIBLE, visible);
}
}
......@@ -14,12 +14,18 @@ import org.chromium.ui.modelutil.PropertyModel;
*/
@JNINamespace("autofill_assistant")
public class AssistantHeaderModel extends PropertyModel {
static final WritableObjectPropertyKey<String> STATUS_MESSAGE =
@VisibleForTesting
public static final WritableObjectPropertyKey<String> STATUS_MESSAGE =
new WritableObjectPropertyKey<>();
static final WritableBooleanPropertyKey FEEDBACK_VISIBLE = new WritableBooleanPropertyKey();
// TODO(crbug.com/806868): Change visibility to package-private once this is only set through
// native calls.
public static final WritableBooleanPropertyKey FEEDBACK_VISIBLE =
new WritableBooleanPropertyKey();
static final WritableBooleanPropertyKey CLOSE_VISIBLE = new WritableBooleanPropertyKey();
// TODO(crbug.com/806868): Change visibility to package-private once this is only set through
// native calls.
public static final WritableBooleanPropertyKey CLOSE_VISIBLE = new WritableBooleanPropertyKey();
static final WritableIntPropertyKey PROGRESS = new WritableIntPropertyKey();
......
......@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.autofill_assistant.payment;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
......@@ -21,19 +22,21 @@ import org.chromium.payments.mojom.PaymentOptions;
*/
public class AssistantPaymentRequestCoordinator {
private final WebContents mWebContents;
private final Runnable mOnVisibilityChanged;
@Nullable
private Runnable mOnVisibilityChanged;
private final ViewGroup mView;
private Promise<SelectedPaymentInformation> mCurrentPromise;
public AssistantPaymentRequestCoordinator(
ChromeActivity activity, Runnable onVisibilityChanged) {
public AssistantPaymentRequestCoordinator(ChromeActivity activity) {
mWebContents = activity.getCurrentWebContents();
mOnVisibilityChanged = onVisibilityChanged;
// TODO(crbug.com/806868): Remove this.
mView = new LinearLayout(activity);
mView.addView(new View(activity));
// Payment request is initially hidden.
setVisible(false);
}
public View getView() {
......@@ -45,10 +48,20 @@ public class AssistantPaymentRequestCoordinator {
boolean changed = mView.getVisibility() != visibility;
if (changed) {
mView.setVisibility(visibility);
mOnVisibilityChanged.run();
if (mOnVisibilityChanged != null) {
mOnVisibilityChanged.run();
}
}
}
/**
* Set the listener that should be triggered when changing the listener of this coordinator
* view.
*/
public void setVisibilityChangedListener(Runnable listener) {
mOnVisibilityChanged = listener;
}
public Promise<SelectedPaymentInformation> reset(
PaymentOptions options, String[] supportedBasicCardNetworks, String defaultEmail) {
assert mCurrentPromise
......
......@@ -158,7 +158,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/autofill_assistant/header/AnimatedProgressBar.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderDelegate.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderMediator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderModel.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/header/AssistantHeaderViewBinder.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/payment/AssistantPaymentRequestCoordinator.java",
......
......@@ -127,8 +127,8 @@ public class AutofillAssistantUiTest {
String testStatusMessage = "test message";
ThreadUtils.runOnUiThreadBlocking(
()
-> assistantCoordinator.getHeaderCoordinator().setStatusMessage(
testStatusMessage));
-> assistantCoordinator.getModel().getHeaderModel().set(
AssistantHeaderModel.STATUS_MESSAGE, testStatusMessage));
TextView statusMessageView = bottomSheet.findViewById(R.id.status_message);
Assert.assertEquals(statusMessageView.getText(), testStatusMessage);
......@@ -147,7 +147,8 @@ public class AutofillAssistantUiTest {
()
-> assistantCoordinator.getModel().getCarouselModel().getChipsModel().set(
chips));
RecyclerView chipsViewContainer = assistantCoordinator.getCarouselCoordinator().getView();
RecyclerView chipsViewContainer =
assistantCoordinator.getBottomBarCoordinator().getCarouselCoordinator().getView();
Assert.assertEquals(2, chipsViewContainer.getAdapter().getItemCount());
// Choose the second chip.
......
......@@ -126,9 +126,12 @@ void UiControllerAndroid::SetProgressPulsingEnabled(bool enabled) {
void UiControllerAndroid::OnFeedbackButtonClicked() {
JNIEnv* env = AttachCurrentThread();
auto jdetails = Java_AssistantDetailsModel_getDetails(env, GetDetailsModel());
auto jstatus_message =
Java_AssistantHeaderModel_getStatusMessage(env, GetHeaderModel());
Java_AutofillAssistantUiController_showFeedback(
env, java_autofill_assistant_ui_controller_,
base::android::ConvertUTF8ToJavaString(env, GetDebugContext()), jdetails);
base::android::ConvertUTF8ToJavaString(env, GetDebugContext()), jdetails,
jstatus_message);
}
void UiControllerAndroid::OnCloseButtonClicked() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment