1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_FACILITATED_PAYMENTS_UI_ANDROID_FACILITATED_PAYMENTS_CONTROLLER_H_
#define CHROME_BROWSER_FACILITATED_PAYMENTS_UI_ANDROID_FACILITATED_PAYMENTS_CONTROLLER_H_
#include <memory>
#include "base/containers/span.h"
#include "base/functional/callback_forward.h"
#include "chrome/browser/facilitated_payments/ui/android/facilitated_payments_bottom_sheet_bridge.h"
#include "components/autofill/core/browser/data_model/payments/bank_account.h"
#include "components/autofill/core/browser/data_model/payments/ewallet.h"
#include "components/facilitated_payments/core/utils/facilitated_payments_ui_utils.h"
namespace content {
class WebContents;
}
// Controller of the bottom sheet surface for filling facilitated payments
// payment methods on Android. It is responsible for showing the view and
// handling user interactions.
class FacilitatedPaymentsController {
public:
explicit FacilitatedPaymentsController(content::WebContents* web_contents);
FacilitatedPaymentsController(const FacilitatedPaymentsController&) = delete;
FacilitatedPaymentsController& operator=(
const FacilitatedPaymentsController&) = delete;
virtual ~FacilitatedPaymentsController();
// Returns true if the device is being used in the landscape mode.
virtual bool IsInLandscapeMode();
// Shows the PIX FOP selector.
virtual void Show(
base::span<const autofill::BankAccount> bank_account_suggestions,
base::OnceCallback<void(int64_t)> on_payment_account_selected);
// Shows the eWallet FOP selector.
virtual void ShowForEwallet(
base::span<const autofill::Ewallet> ewallet_suggestions,
base::OnceCallback<void(int64_t)> on_payment_account_selected);
// Asks the `view_` to show the progress screen. Virtual for overriding in
// tests.
virtual void ShowProgressScreen();
// Asks the `view_` to show the error screen. Virtual for overriding in tests.
virtual void ShowErrorScreen();
// Asks the `view_` to close the bottom sheet. Virtual for overriding in
// tests.
virtual void Dismiss();
// Enables features to listen to `payments::facilitated::UiEvent` using
// `ui_event_listener`.
void SetUiEventListener(
base::RepeatingCallback<void(payments::facilitated::UiEvent)>
ui_event_listener);
// Called by the Java view to communicate `payments::facilitated::UiEvent`.
void OnUiEvent(JNIEnv* env, jint event);
void OnBankAccountSelected(JNIEnv* env, jlong instrument_id);
void OnEwalletSelected(JNIEnv* env, jlong instrument_id);
// Asks the `view_` to show the PIX account linking prompt. Virtual for
// overriding in tests.
virtual void ShowPixAccountLinkingPrompt();
// Called by the Java view to communicate acceptance of Pix account linking
// prompt.
void OnPixAccountLinkingPromptAccepted(JNIEnv* env);
// Called by the Java view to communicate that the Pix account linking prompt
// was declined.
void OnPixAccountLinkingPromptDeclined(JNIEnv* env);
base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
void SetViewForTesting(
std::unique_ptr<
payments::facilitated::FacilitatedPaymentsBottomSheetBridge> view);
private:
FRIEND_TEST_ALL_PREFIXES(FacilitatedPaymentsControllerTest, OnDismissed);
// Clears any native references from the Java view components, and then clears
// the pointers to the Java objects.
void ClearJavaViewComponents();
// View that displays the surface.
std::unique_ptr<payments::facilitated::FacilitatedPaymentsBottomSheetBridge>
view_;
// The corresponding Java FacilitatedPaymentsControllerBridge. This bridge is
// used to delegate user actions from Java to native.
base::android::ScopedJavaGlobalRef<jobject> java_object_;
// Called when user selects the payment account to pay with.
base::OnceCallback<void(int64_t)> on_payment_account_selected_;
// Callback used to communicate view events to the feature.
base::RepeatingCallback<void(payments::facilitated::UiEvent)>
ui_event_listener_;
};
#endif // CHROME_BROWSER_FACILITATED_PAYMENTS_UI_ANDROID_FACILITATED_PAYMENTS_CONTROLLER_H_
|