Commit 231c1791 authored by Clemens Arbesser's avatar Clemens Arbesser Committed by Commit Bot

[Autofill Assistant] Moved header JNI methods into dedicated file.

This will allow classes other than UiControllerAndroid to use these
methods. It would probably be a good idea to move all similar JNI calls
each into their own classes, but that's beyond the scope of this CL.

Bug: b/171776026
Change-Id: If0825557d23150d5ca94fec6dec208074abb6895
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2524527
Commit-Queue: Clemens Arbesser <arbesser@google.com>
Reviewed-by: default avatarSandro Maggi <sandromaggi@google.com>
Cr-Commit-Position: refs/heads/master@{#826245}
parent 12e1e936
......@@ -2420,6 +2420,8 @@ static_library("browser") {
"android/autofill_assistant/assistant_generic_ui_delegate.h",
"android/autofill_assistant/assistant_header_delegate.cc",
"android/autofill_assistant/assistant_header_delegate.h",
"android/autofill_assistant/assistant_header_model.cc",
"android/autofill_assistant/assistant_header_model.h",
"android/autofill_assistant/assistant_overlay_delegate.cc",
"android/autofill_assistant/assistant_overlay_delegate.h",
"android/autofill_assistant/client_android.cc",
......
......@@ -30,7 +30,7 @@ void AssistantHeaderDelegate::OnFeedbackButtonClicked(
}
base::android::ScopedJavaGlobalRef<jobject>
AssistantHeaderDelegate::GetJavaObject() {
AssistantHeaderDelegate::GetJavaObject() const {
return java_assistant_header_delegate_;
}
......
......@@ -19,7 +19,7 @@ class AssistantHeaderDelegate {
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller);
base::android::ScopedJavaGlobalRef<jobject> GetJavaObject();
base::android::ScopedJavaGlobalRef<jobject> GetJavaObject() const;
private:
UiControllerAndroid* ui_controller_;
......
// Copyright 2020 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.
#include "chrome/browser/android/autofill_assistant/assistant_header_model.h"
#include "base/android/jni_string.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantHeaderModel_jni.h"
#include "chrome/browser/android/autofill_assistant/ui_controller_android.h"
#include "chrome/browser/android/autofill_assistant/ui_controller_android_utils.h"
using base::android::AttachCurrentThread;
namespace autofill_assistant {
AssistantHeaderModel::AssistantHeaderModel(
const base::android::ScopedJavaLocalRef<jobject>& jmodel)
: jmodel_(jmodel) {}
AssistantHeaderModel::~AssistantHeaderModel() = default;
void AssistantHeaderModel::SetDelegate(
const AssistantHeaderDelegate& delegate) {
Java_AssistantHeaderModel_setDelegate(AttachCurrentThread(), jmodel_,
delegate.GetJavaObject());
}
void AssistantHeaderModel::SetStatusMessage(const std::string& status_message) {
JNIEnv* env = AttachCurrentThread();
Java_AssistantHeaderModel_setStatusMessage(
env, jmodel_,
base::android::ConvertUTF8ToJavaString(env, status_message));
}
void AssistantHeaderModel::SetBubbleMessage(const std::string& bubble_message) {
JNIEnv* env = AttachCurrentThread();
Java_AssistantHeaderModel_setBubbleMessage(
env, jmodel_,
base::android::ConvertUTF8ToJavaString(env, bubble_message));
}
void AssistantHeaderModel::SetProgress(int progress) {
Java_AssistantHeaderModel_setProgress(AttachCurrentThread(), jmodel_,
progress);
}
void AssistantHeaderModel::SetProgressActiveStep(int active_step) {
Java_AssistantHeaderModel_setProgressActiveStep(AttachCurrentThread(),
jmodel_, active_step);
}
void AssistantHeaderModel::SetProgressVisible(bool visible) {
Java_AssistantHeaderModel_setProgressVisible(AttachCurrentThread(), jmodel_,
visible);
}
void AssistantHeaderModel::SetProgressBarErrorState(bool error) {
Java_AssistantHeaderModel_setProgressBarErrorState(AttachCurrentThread(),
jmodel_, error);
}
void AssistantHeaderModel::SetStepProgressBarConfiguration(
const ShowProgressBarProto::StepProgressBarConfiguration& configuration,
const base::android::ScopedJavaLocalRef<jobject>& jcontext) {
JNIEnv* env = AttachCurrentThread();
Java_AssistantHeaderModel_setUseStepProgressBar(
env, jmodel_, configuration.use_step_progress_bar());
if (!configuration.annotated_step_icons().empty()) {
auto jlist = Java_AssistantHeaderModel_createIconList(env);
for (const auto& icon : configuration.annotated_step_icons()) {
Java_AssistantHeaderModel_addStepProgressBarIcon(
env, jlist,
ui_controller_android_utils::CreateJavaDrawable(env, jcontext,
icon.icon()));
}
Java_AssistantHeaderModel_setStepProgressBarIcons(env, jmodel_, jlist);
}
}
void AssistantHeaderModel::SetSpinPoodle(bool enabled) {
Java_AssistantHeaderModel_setSpinPoodle(AttachCurrentThread(), jmodel_,
enabled);
}
void AssistantHeaderModel::SetChips(
const base::android::ScopedJavaLocalRef<jobject>& jchips) {
Java_AssistantHeaderModel_setChips(AttachCurrentThread(), jmodel_, jchips);
}
void AssistantHeaderModel::SetDisableAnimations(bool disable_animations) {
Java_AssistantHeaderModel_setDisableAnimations(AttachCurrentThread(), jmodel_,
disable_animations);
}
base::android::ScopedJavaGlobalRef<jobject>
AssistantHeaderModel::GetJavaObject() const {
return jmodel_;
}
} // namespace autofill_assistant
// Copyright 2020 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_ASSISTANT_HEADER_MODEL_H_
#define CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_ASSISTANT_HEADER_MODEL_H_
#include <string>
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "chrome/browser/android/autofill_assistant/assistant_header_delegate.h"
#include "components/autofill_assistant/browser/service.pb.h"
namespace autofill_assistant {
// C++ equivalent to java-side |AssistantHeaderModel|.
class AssistantHeaderModel {
public:
AssistantHeaderModel(
const base::android::ScopedJavaLocalRef<jobject>& jmodel);
~AssistantHeaderModel();
base::android::ScopedJavaGlobalRef<jobject> GetJavaObject() const;
void SetDelegate(const AssistantHeaderDelegate& delegate);
void SetStatusMessage(const std::string& status_message);
void SetBubbleMessage(const std::string& bubble_message);
void SetProgress(int progress);
void SetProgressActiveStep(int active_step);
void SetProgressVisible(bool visible);
void SetProgressBarErrorState(bool error);
void SetStepProgressBarConfiguration(
const ShowProgressBarProto::StepProgressBarConfiguration& configuration,
const base::android::ScopedJavaLocalRef<jobject>& jcontext);
void SetSpinPoodle(bool enabled);
void SetChips(const base::android::ScopedJavaLocalRef<jobject>& jchips);
void SetDisableAnimations(bool disable_animations);
private:
// Java-side AssistantHeaderModel object.
base::android::ScopedJavaGlobalRef<jobject> jmodel_;
};
} // namespace autofill_assistant
#endif // CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_ASSISTANT_HEADER_MODEL_H_
......@@ -23,7 +23,6 @@
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantFormInput_jni.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantFormModel_jni.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantGenericUiModel_jni.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantHeaderModel_jni.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantInfoBoxModel_jni.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantInfoBox_jni.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantModel_jni.h"
......@@ -290,14 +289,15 @@ UiControllerAndroid::UiControllerAndroid(
/* allowTabSwitching= */
base::FeatureList::IsEnabled(features::kAutofillAssistantChromeEntry),
reinterpret_cast<intptr_t>(this), joverlay_coordinator);
header_model_ = std::make_unique<AssistantHeaderModel>(
Java_AssistantModel_getHeaderModel(env, GetModel()));
// Register overlay_delegate_ as delegate for the overlay.
Java_AssistantOverlayModel_setDelegate(env, GetOverlayModel(),
overlay_delegate_.GetJavaObject());
// Register header_delegate_ as delegate for clicks on header buttons.
Java_AssistantHeaderModel_setDelegate(env, GetHeaderModel(),
header_delegate_.GetJavaObject());
header_model_->SetDelegate(header_delegate_);
// Register collect_user_data_delegate_ as delegate for the collect user data
// UI.
......@@ -370,13 +370,6 @@ base::android::ScopedJavaLocalRef<jobject> UiControllerAndroid::GetModel() {
java_object_);
}
// Header related methods.
base::android::ScopedJavaLocalRef<jobject>
UiControllerAndroid::GetHeaderModel() {
return Java_AssistantModel_getHeaderModel(AttachCurrentThread(), GetModel());
}
void UiControllerAndroid::OnStateChanged(AutofillAssistantState new_state) {
if (!Java_AssistantModel_getVisible(AttachCurrentThread(), GetModel())) {
// Leave the UI alone as long as it's invisible. Missed state changes will
......@@ -457,59 +450,36 @@ void UiControllerAndroid::SetupForState() {
}
void UiControllerAndroid::OnStatusMessageChanged(const std::string& message) {
JNIEnv* env = AttachCurrentThread();
Java_AssistantHeaderModel_setStatusMessage(
env, GetHeaderModel(),
base::android::ConvertUTF8ToJavaString(env, message));
header_model_->SetStatusMessage(message);
}
void UiControllerAndroid::OnBubbleMessageChanged(const std::string& message) {
if (!message.empty()) {
JNIEnv* env = AttachCurrentThread();
Java_AssistantHeaderModel_setBubbleMessage(
env, GetHeaderModel(),
base::android::ConvertUTF8ToJavaString(env, message));
header_model_->SetBubbleMessage(message);
}
}
void UiControllerAndroid::OnProgressChanged(int progress) {
Java_AssistantHeaderModel_setProgress(AttachCurrentThread(), GetHeaderModel(),
progress);
header_model_->SetProgress(progress);
}
void UiControllerAndroid::OnProgressActiveStepChanged(int active_step) {
Java_AssistantHeaderModel_setProgressActiveStep(
AttachCurrentThread(), GetHeaderModel(), active_step);
header_model_->SetProgressActiveStep(active_step);
}
void UiControllerAndroid::OnProgressVisibilityChanged(bool visible) {
Java_AssistantHeaderModel_setProgressVisible(AttachCurrentThread(),
GetHeaderModel(), visible);
header_model_->SetProgressVisible(visible);
}
void UiControllerAndroid::OnProgressBarErrorStateChanged(bool error) {
Java_AssistantHeaderModel_setProgressBarErrorState(AttachCurrentThread(),
GetHeaderModel(), error);
header_model_->SetProgressBarErrorState(error);
}
void UiControllerAndroid::OnStepProgressBarConfigurationChanged(
const ShowProgressBarProto::StepProgressBarConfiguration& configuration) {
JNIEnv* env = AttachCurrentThread();
auto jmodel = GetHeaderModel();
Java_AssistantHeaderModel_setUseStepProgressBar(
env, jmodel, configuration.use_step_progress_bar());
if (!configuration.annotated_step_icons().empty()) {
auto jcontext =
Java_AutofillAssistantUiController_getContext(env, java_object_);
auto jlist = Java_AssistantHeaderModel_createIconList(env);
for (const auto& icon : configuration.annotated_step_icons()) {
Java_AssistantHeaderModel_addStepProgressBarIcon(
env, jlist,
ui_controller_android_utils::CreateJavaDrawable(env, jcontext,
icon.icon()));
}
Java_AssistantHeaderModel_setStepProgressBarIcons(env, jmodel, jlist);
}
header_model_->SetStepProgressBarConfiguration(
configuration, Java_AutofillAssistantUiController_getContext(
AttachCurrentThread(), java_object_));
}
void UiControllerAndroid::OnViewportModeChanged(ViewportMode mode) {
......@@ -556,8 +526,7 @@ void UiControllerAndroid::ShowContentAndExpandBottomSheet() {
}
void UiControllerAndroid::SetSpinPoodle(bool enabled) {
Java_AssistantHeaderModel_setSpinPoodle(AttachCurrentThread(),
GetHeaderModel(), enabled);
header_model_->SetSpinPoodle(enabled);
}
void UiControllerAndroid::OnFeedbackButtonClicked() {
......@@ -832,8 +801,7 @@ void UiControllerAndroid::UpdateActions(
}
Java_AutofillAssistantUiController_setActions(env, java_object_, jchips);
Java_AssistantHeaderModel_setChips(AttachCurrentThread(), GetHeaderModel(),
jsticky_chips);
header_model_->SetChips(jsticky_chips);
}
void UiControllerAndroid::OnUserActionsChanged(
......@@ -1716,8 +1684,7 @@ void UiControllerAndroid::OnClientSettingsChanged(
Java_AssistantOverlayModel_clearOverlayImage(env, GetOverlayModel());
}
if (settings.integration_test_settings.has_value()) {
Java_AssistantHeaderModel_setDisableAnimations(
env, GetHeaderModel(),
header_model_->SetDisableAnimations(
settings.integration_test_settings->disable_header_animations());
Java_AutofillAssistantUiController_setDisableChipChangeAnimations(
env, java_object_,
......
......@@ -16,6 +16,7 @@
#include "chrome/browser/android/autofill_assistant/assistant_form_delegate.h"
#include "chrome/browser/android/autofill_assistant/assistant_generic_ui_delegate.h"
#include "chrome/browser/android/autofill_assistant/assistant_header_delegate.h"
#include "chrome/browser/android/autofill_assistant/assistant_header_model.h"
#include "chrome/browser/android/autofill_assistant/assistant_overlay_delegate.h"
#include "components/autofill_assistant/browser/chip.h"
#include "components/autofill_assistant/browser/controller_observer.h"
......@@ -284,6 +285,8 @@ class UiControllerAndroid : public ControllerObserver {
OverlayState desired_overlay_state_ = OverlayState::FULL;
OverlayState overlay_state_ = OverlayState::FULL;
std::unique_ptr<AssistantHeaderModel> header_model_;
base::WeakPtrFactory<UiControllerAndroid> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(UiControllerAndroid);
......
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