chromium/chrome/browser/ui/android/autofill/autofill_vcn_enroll_bottom_sheet_bridge.cc

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/android/autofill/autofill_vcn_enroll_bottom_sheet_bridge.h"

#include <utility>

#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "components/autofill/android/payments/legal_message_line_android.h"
#include "components/autofill/core/browser/metrics/payments/virtual_card_enrollment_metrics.h"
#include "components/autofill/core/browser/payments/autofill_virtual_card_enrollment_infobar_delegate_mobile.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "components/strings/grit/components_strings.h"
#include "content/public/browser/web_contents.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/android/java_bitmap.h"

// Must come after all headers that specialize FromJniType() / ToJniType().
#include "chrome/android/chrome_jni_headers/AutofillVcnEnrollBottomSheetBridge_jni.h"

namespace autofill {

AutofillVCNEnrollBottomSheetBridge::AutofillVCNEnrollBottomSheetBridge()
    : java_bridge_(Java_AutofillVcnEnrollBottomSheetBridge_Constructor(
          base::android::AttachCurrentThread())) {}

AutofillVCNEnrollBottomSheetBridge::~AutofillVCNEnrollBottomSheetBridge() {
  Java_AutofillVcnEnrollBottomSheetBridge_hide(
      base::android::AttachCurrentThread(), java_bridge_);
}

bool AutofillVCNEnrollBottomSheetBridge::RequestShowContent(
    content::WebContents* web_contents,
    std::unique_ptr<AutofillVirtualCardEnrollmentInfoBarDelegateMobile>
        delegate) {
  if (!web_contents) {
    return false;
  }

  base::android::ScopedJavaLocalRef<jobject> java_web_contents =
      web_contents->GetJavaWebContents();
  if (!java_web_contents) {
    return false;
  }

  delegate_ = std::move(delegate);

  JNIEnv* env = base::android::AttachCurrentThread();

  return Java_AutofillVcnEnrollBottomSheetBridge_requestShowContent(
      env, java_bridge_, reinterpret_cast<jlong>(this), java_web_contents,
      delegate_->GetMessageText(), delegate_->GetDescriptionText(),
      delegate_->GetLearnMoreLinkText(),
      l10n_util::GetStringFUTF16(
          IDS_AUTOFILL_VIRTUAL_CARD_CONTAINER_ACCESSIBILITY_DESCRIPTION,
          delegate_->GetCardLabel()),
      gfx::ConvertToJavaBitmap(*delegate_->GetIssuerIcon()->bitmap()),
      delegate_->GetCardLabel(),
      l10n_util::GetStringUTF16(IDS_AUTOFILL_VIRTUAL_CARD_ENTRY_PREFIX),
      LegalMessageLineAndroid::ConvertToJavaLinkedList(
          delegate_->GetGoogleLegalMessage()),
      LegalMessageLineAndroid::ConvertToJavaLinkedList(
          delegate_->GetIssuerLegalMessage()),
      delegate_->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK),
      delegate_->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL),
      l10n_util::GetStringUTF16(
          IDS_AUTOFILL_VIRTUAL_CARD_ENROLL_LOADING_THROBBER_ACCESSIBLE_NAME));
}

void AutofillVCNEnrollBottomSheetBridge::Hide() {
  Java_AutofillVcnEnrollBottomSheetBridge_hide(
      base::android::AttachCurrentThread(), java_bridge_);
}

void AutofillVCNEnrollBottomSheetBridge::OnAccept(JNIEnv* env) {
  delegate_->Accept();
}

void AutofillVCNEnrollBottomSheetBridge::OnCancel(JNIEnv* env) {
  delegate_->Cancel();
}

void AutofillVCNEnrollBottomSheetBridge::OnDismiss(JNIEnv* env) {
  delegate_->InfoBarDismissed();
}

void AutofillVCNEnrollBottomSheetBridge::RecordLinkClickMetric(JNIEnv* env,
                                                               int link_type) {
  LogVirtualCardEnrollmentLinkClickedMetric(
      static_cast<VirtualCardEnrollmentLinkType>(link_type),
      delegate_->GetVirtualCardEnrollmentBubbleSource());
}

}  // namespace autofill