blob: b6fc32a9c07992f2f01f5b508efa03ef45b4637c [file] [log] [blame]
// 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.
#ifndef CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_UI_CONTROLLER_ANDROID_H_
#define CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_UI_CONTROLLER_ANDROID_H_
#include <memory>
#include <string>
#include <vector>
#include "base/android/scoped_java_ref.h"
#include "base/macros.h"
#include "components/autofill_assistant/browser/access_token_fetcher.h"
#include "components/autofill_assistant/browser/client.h"
#include "components/autofill_assistant/browser/ui_controller.h"
namespace content {
class BrowserContext;
} // namespace content
namespace autofill_assistant {
// Class implements UiController, Client and starts the Controller.
class UiControllerAndroid : public UiController,
public Client,
public AccessTokenFetcher {
public:
UiControllerAndroid(
JNIEnv* env,
jobject jcaller,
const base::android::JavaParamRef<jobject>& webContents,
const base::android::JavaParamRef<jobjectArray>& parameterNames,
const base::android::JavaParamRef<jobjectArray>& parameterValues,
const base::android::JavaParamRef<jstring>& locale,
const base::android::JavaParamRef<jstring>& countryCode);
~UiControllerAndroid() override;
// Overrides UiController:
void SetUiDelegate(UiDelegate* ui_delegate) override;
void ShowStatusMessage(const std::string& message) override;
void ShowOverlay() override;
void HideOverlay() override;
void Shutdown() override;
void ShutdownGracefully() override;
void UpdateScripts(const std::vector<ScriptHandle>& scripts) override;
void ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) override;
void ChooseCard(
base::OnceCallback<void(const std::string&)> callback) override;
void GetPaymentInformation(
payments::mojom::PaymentOptionsPtr payment_options,
base::OnceCallback<void(std::unique_ptr<PaymentInformation>)> callback,
const std::string& title,
const std::vector<std::string>& supported_basic_card_networks) override;
void HideDetails() override;
bool ShowDetails(const DetailsProto& details) override;
void ShowProgressBar(int progress, const std::string& message) override;
void HideProgressBar() override;
void UpdateTouchableArea(bool enabled,
const std::vector<RectF>& areas) override;
std::string GetDebugContext() const override;
// Overrides Client:
std::string GetApiKey() override;
AccessTokenFetcher* GetAccessTokenFetcher() override;
autofill::PersonalDataManager* GetPersonalDataManager() override;
std::string GetServerUrl() override;
UiController* GetUiController() override;
// Overrides AccessTokenFetcher
void FetchAccessToken(
base::OnceCallback<void(bool, const std::string&)>) override;
void InvalidateAccessToken(const std::string& access_token) override;
// Called by Java.
void Start(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& initialUrlString);
void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
void ScrollBy(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
float distanceX,
float distanceY);
void UpdateTouchableArea(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void OnScriptSelected(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& jscript_path);
void OnAddressSelected(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& jaddress_guid);
void OnCardSelected(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& jcard_guid);
void OnGetPaymentInformation(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
jboolean jsucceed,
const base::android::JavaParamRef<jobject>& jcard,
const base::android::JavaParamRef<jobject>& jaddress,
const base::android::JavaParamRef<jstring>& jpayer_name,
const base::android::JavaParamRef<jstring>& jpayer_phone,
const base::android::JavaParamRef<jstring>& jpayer_email,
jboolean jis_terms_and_services_accepted);
void OnAccessToken(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
jboolean success,
const base::android::JavaParamRef<jstring>& access_token);
base::android::ScopedJavaLocalRef<jstring> GetPrimaryAccountName(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller);
base::android::ScopedJavaLocalRef<jstring> OnRequestDebugContext(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller);
private:
// Java-side AutofillAssistantUiController object.
base::android::ScopedJavaGlobalRef<jobject>
java_autofill_assistant_ui_controller_;
UiDelegate* ui_delegate_;
content::BrowserContext* browser_context_;
base::OnceCallback<void(const std::string&)> address_or_card_callback_;
base::OnceCallback<void(std::unique_ptr<PaymentInformation>)>
get_payment_information_callback_;
std::unique_ptr<AccessTokenFetcher> access_token_fetcher_;
base::OnceCallback<void(bool, const std::string&)>
fetch_access_token_callback_;
DISALLOW_COPY_AND_ASSIGN(UiControllerAndroid);
};
} // namespace autofill_assistant.
#endif // CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_UI_CONTROLLER_ANDROID_H_