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
|
// 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.
#ifndef CHROME_BROWSER_UI_PLUS_ADDRESSES_ANDROID_PLUS_ADDRESS_CREATION_VIEW_ANDROID_H_
#define CHROME_BROWSER_UI_PLUS_ADDRESSES_ANDROID_PLUS_ADDRESS_CREATION_VIEW_ANDROID_H_
#include <jni.h>
#include "components/plus_addresses/plus_address_types.h"
#include "ui/gfx/native_widget_types.h"
class TabModel;
namespace plus_addresses {
class PlusAddressCreationController;
struct PlusAddressCreationErrorStateInfo {
PlusAddressCreationBottomSheetErrorType error_type;
std::u16string title;
std::u16string description;
std::u16string ok_text;
std::u16string cancel_text;
PlusAddressCreationErrorStateInfo(
PlusAddressCreationBottomSheetErrorType error_type,
std::u16string title,
std::u16string description,
std::u16string ok_text,
std::u16string cancel_text);
~PlusAddressCreationErrorStateInfo();
PlusAddressCreationErrorStateInfo(const PlusAddressCreationErrorStateInfo&);
PlusAddressCreationErrorStateInfo(PlusAddressCreationErrorStateInfo&&);
PlusAddressCreationErrorStateInfo& operator=(
const PlusAddressCreationErrorStateInfo&);
PlusAddressCreationErrorStateInfo& operator=(
PlusAddressCreationErrorStateInfo&&);
};
// A class intended as a thin wrapper around a Java object, which calls out to
// the `PlusAddressCreationControllerAndroid`. This shields the controller from
// JNI complications, allowing a consistent interface for clients (e.g.,
// autofill). Note that it is likely that either the controller will morph to do
// what this class does now, or a similar wrapper will be created for desktop,
// with a single controller implementation.
class PlusAddressCreationViewAndroid {
public:
explicit PlusAddressCreationViewAndroid(
base::WeakPtr<PlusAddressCreationController> controller);
~PlusAddressCreationViewAndroid();
void ShowInit(gfx::NativeView native_view,
TabModel* tab_model,
const std::string& primary_email_address,
const std::u16string& origin_for_display,
bool refresh_supported,
bool has_accepted_notice);
void TryAgainToReservePlusAddress(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void OnRefreshClicked(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void OnConfirmRequested(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void OnCanceled(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
void PromptDismissed(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Updates the bottomsheet to either show an error message or show the
// plus address in the bottomsheet and enable the OK button.
void ShowReservedProfile(const PlusProfile& reserved_profile);
// Either shows an error message on the bottomsheet or closes the bottomsheet.
void FinishConfirm();
// Shows the error state ui to the user.
void ShowError(PlusAddressCreationErrorStateInfo error_info);
// Hides the refresh icon in case no more plus address refreshes are available
// to the user.
void HideRefreshButton();
private:
// Returns either the fully initialized java counterpart of this bridge or
// a is_null() reference if the creation failed. By using this method, the
// bridge will try to recreate the java object if it failed previously (e.g.
// because there was no native window available).
base::android::ScopedJavaGlobalRef<jobject> GetOrCreateJavaObject(
gfx::NativeView native_view,
TabModel* tab_model);
// The corresponding java object.
base::android::ScopedJavaGlobalRef<jobject> java_object_;
base::WeakPtr<PlusAddressCreationController> controller_;
};
} // namespace plus_addresses
#endif // CHROME_BROWSER_UI_PLUS_ADDRESSES_ANDROID_PLUS_ADDRESS_CREATION_VIEW_ANDROID_H_
|