Commit 5eef4e30 authored by Tanmoy Mollik's avatar Tanmoy Mollik Committed by Chromium LUCI CQ

[Android] Create PrimaryAccountChangeEvent for java IdentityManager

This cl imports PrimaryAccountChangeEvent from c++ code to java code.

Following cls will refactor IdentityManager.Observer.(onPrimaryAccountSet
/Cleared) methods to onPrimaryAccountChanged method. That way signin code
will be more consistent across all platforms.

Bug: 1158855
Change-Id: I2c65e81a369540a9eadf85a9d1ba4c0c716853a0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2603747
Commit-Queue: Tanmoy Mollik <triploblastic@chromium.org>
Reviewed-by: default avatarAlice Wang <aliceywang@chromium.org>
Reviewed-by: default avatarMihai Sardarescu <msarda@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840113}
parent f64a4c42
...@@ -22,6 +22,7 @@ android_library("java") { ...@@ -22,6 +22,7 @@ android_library("java") {
"java/src/org/chromium/components/signin/base/GoogleServiceAuthError.java", "java/src/org/chromium/components/signin/base/GoogleServiceAuthError.java",
"java/src/org/chromium/components/signin/identitymanager/IdentityManager.java", "java/src/org/chromium/components/signin/identitymanager/IdentityManager.java",
"java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java", "java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java",
"java/src/org/chromium/components/signin/identitymanager/PrimaryAccountChangeEvent.java",
"java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegate.java", "java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegate.java",
] ]
...@@ -37,6 +38,7 @@ generate_jni("jni_headers") { ...@@ -37,6 +38,7 @@ generate_jni("jni_headers") {
"java/src/org/chromium/components/signin/base/GoogleServiceAuthError.java", "java/src/org/chromium/components/signin/base/GoogleServiceAuthError.java",
"java/src/org/chromium/components/signin/identitymanager/IdentityManager.java", "java/src/org/chromium/components/signin/identitymanager/IdentityManager.java",
"java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java", "java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java",
"java/src/org/chromium/components/signin/identitymanager/PrimaryAccountChangeEvent.java",
"java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegate.java", "java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegate.java",
] ]
} }
......
...@@ -28,6 +28,13 @@ public class IdentityManager { ...@@ -28,6 +28,13 @@ public class IdentityManager {
* is a subset of native's IdentityManager::Observer. * is a subset of native's IdentityManager::Observer.
*/ */
public interface Observer { public interface Observer {
/**
* Called for all types of changes to the primary account such as - primary account
* set/cleared or sync consent granted/revoked in C++.
* @param eventDetails Details about the primary account change event.
*/
default void onPrimaryAccountChanged(PrimaryAccountChangeEvent eventDetails) {}
/** /**
* Called when an account becomes the user's primary account. * Called when an account becomes the user's primary account.
* This method is not called during a reauth. * This method is not called during a reauth.
...@@ -102,6 +109,17 @@ public class IdentityManager { ...@@ -102,6 +109,17 @@ public class IdentityManager {
mObservers.removeObserver(observer); mObservers.removeObserver(observer);
} }
/**
* Called for all types of changes to the primary account such as - primary account set/cleared
* or sync consent granted/revoked in C++.
*/
@CalledByNative
private void onPrimaryAccountChanged(PrimaryAccountChangeEvent eventDetails) {
for (Observer observer : mObservers) {
observer.onPrimaryAccountChanged(eventDetails);
}
}
/** /**
* Notifies observers that the primary account was set in C++. * Notifies observers that the primary account was set in C++.
*/ */
......
// 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.
package org.chromium.components.signin.identitymanager;
import androidx.annotation.IntDef;
import org.chromium.base.annotations.CalledByNative;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Event class for primary account change events fired by {@link
* org.chromium.components.signin.identitymanager.IdentityManager} This class has a native
* counterpart called PrimaryAccountChangeEvent.
*/
public class PrimaryAccountChangeEvent {
/**
* This class mirrors the native PrimaryAccountChangeEvent class Type enum from:
* components/signin/public/identity_manager/primary_account_change_event.h
*/
@IntDef({Type.NONE, Type.SET, Type.CLEARED})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
// No change.
int NONE = 0;
// Primary account set or changed.
int SET = 1;
// Primary account cleared.
int CLEARED = 2;
}
private final @Type int mEventTypeForConsentLevelSync;
private final @Type int mEventTypeForConsentLevelNotRequired;
@CalledByNative
public PrimaryAccountChangeEvent(
@Type int eventTypeForConsentLevelNotRequired, @Type int eventTypeForConsentLevelSync) {
mEventTypeForConsentLevelNotRequired = eventTypeForConsentLevelNotRequired;
mEventTypeForConsentLevelSync = eventTypeForConsentLevelSync;
}
/**
* Returns primary account change event type for the corresponding consentLevel.
* @param consentLevel The consent level for the primary account change.
* @return The event type for the change.
* NONE - No change in primary account for consentLevel.
* SET - A new primary account is set or changed for consentLevel.
* CLEARED - The primary account set for consentLevel is cleared.
*/
public @Type int getEventTypeFor(@ConsentLevel int consentLevel) {
return consentLevel == ConsentLevel.SYNC ? mEventTypeForConsentLevelSync
: mEventTypeForConsentLevelNotRequired;
}
}
\ No newline at end of file
...@@ -506,6 +506,9 @@ void IdentityManager::OnPrimaryAccountChanged( ...@@ -506,6 +506,9 @@ void IdentityManager::OnPrimaryAccountChanged(
if (!java_identity_manager_) if (!java_identity_manager_)
return; return;
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
Java_IdentityManager_onPrimaryAccountChanged(
env, java_identity_manager_,
ConvertToJavaPrimaryAccountChangeEvent(env, event_details));
switch (event_details.GetEventTypeFor(ConsentLevel::kSync)) { switch (event_details.GetEventTypeFor(ConsentLevel::kSync)) {
case PrimaryAccountChangeEvent::Type::kSet: case PrimaryAccountChangeEvent::Type::kSet:
Java_IdentityManager_onPrimaryAccountSet( Java_IdentityManager_onPrimaryAccountSet(
......
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
#include "components/signin/public/identity_manager/primary_account_change_event.h" #include "components/signin/public/identity_manager/primary_account_change_event.h"
#if defined(OS_ANDROID)
#include "components/signin/public/android/jni_headers/PrimaryAccountChangeEvent_jni.h"
#endif
namespace signin { namespace signin {
PrimaryAccountChangeEvent::State::State() = default; PrimaryAccountChangeEvent::State::State() = default;
...@@ -94,4 +98,16 @@ std::ostream& operator<<(std::ostream& os, ...@@ -94,4 +98,16 @@ std::ostream& operator<<(std::ostream& os,
return os; return os;
} }
#if defined(OS_ANDROID)
base::android::ScopedJavaLocalRef<jobject>
ConvertToJavaPrimaryAccountChangeEvent(
JNIEnv* env,
const PrimaryAccountChangeEvent& event_details) {
return Java_PrimaryAccountChangeEvent_Constructor(
env, jint(event_details.GetEventTypeFor(ConsentLevel::kNotRequired)),
jint(event_details.GetEventTypeFor(ConsentLevel::kSync)));
}
#endif // defined(OS_ANDROID)
} // namespace signin } // namespace signin
\ No newline at end of file
...@@ -5,9 +5,14 @@ ...@@ -5,9 +5,14 @@
#ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_CHANGE_EVENT_H_ #ifndef COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_CHANGE_EVENT_H_
#define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_CHANGE_EVENT_H_ #define COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_CHANGE_EVENT_H_
#include "build/build_config.h"
#include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/account_info.h"
#include "components/signin/public/identity_manager/consent_level.h" #include "components/signin/public/identity_manager/consent_level.h"
#if defined(OS_ANDROID)
#include "base/android/scoped_java_ref.h"
#endif
namespace signin { namespace signin {
class PrimaryAccountChangeEvent { class PrimaryAccountChangeEvent {
...@@ -17,9 +22,9 @@ class PrimaryAccountChangeEvent { ...@@ -17,9 +22,9 @@ class PrimaryAccountChangeEvent {
// No change. // No change.
kNone = 0, kNone = 0,
// Primary account set or changed. // Primary account set or changed.
kSet, kSet = 1,
// Primary account cleared. // Primary account cleared.
kCleared kCleared = 2
}; };
struct State { struct State {
...@@ -59,6 +64,14 @@ std::ostream& operator<<(std::ostream& os, ...@@ -59,6 +64,14 @@ std::ostream& operator<<(std::ostream& os,
const PrimaryAccountChangeEvent::State& state); const PrimaryAccountChangeEvent::State& state);
std::ostream& operator<<(std::ostream& os, std::ostream& operator<<(std::ostream& os,
const PrimaryAccountChangeEvent& event); const PrimaryAccountChangeEvent& event);
#if defined(OS_ANDROID)
base::android::ScopedJavaLocalRef<jobject>
ConvertToJavaPrimaryAccountChangeEvent(
JNIEnv* env,
const PrimaryAccountChangeEvent& event_details);
#endif
} // namespace signin } // namespace signin
#endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_CHANGE_EVENT_H_ #endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_PRIMARY_ACCOUNT_CHANGE_EVENT_H_
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