Skip to content

Commit 02ab187

Browse files
committed
Address review comments.
1 parent 561e9b0 commit 02ab187

File tree

1 file changed

+44
-23
lines changed

1 file changed

+44
-23
lines changed

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/internal/ProxyAnalyticsConnector.java

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.google.firebase.inappmessaging.internal;
1616

1717
import android.os.Bundle;
18+
import androidx.annotation.GuardedBy;
1819
import androidx.annotation.NonNull;
1920
import androidx.annotation.Nullable;
2021
import com.google.firebase.analytics.connector.AnalyticsConnector;
@@ -110,23 +111,32 @@ public int getMaxUserProperties(@NonNull String s) {
110111

111112
private static class ProxyAnalyticsConnectorHandle implements AnalyticsConnectorHandle {
112113
private static final Object UNREGISTERED = new Object();
114+
115+
@GuardedBy("this")
113116
private Set<String> eventNames = new HashSet<>();
114-
private Object instance;
117+
118+
private volatile Object instance;
115119

116120
private ProxyAnalyticsConnectorHandle(
117121
String s,
118122
AnalyticsConnectorListener listener,
119123
Deferred<AnalyticsConnector> analyticsConnector) {
120124
analyticsConnector.whenAvailable(
121125
connectorProvider -> {
126+
Object result = instance;
127+
if (result == UNREGISTERED) {
128+
return;
129+
}
130+
AnalyticsConnector connector = connectorProvider.get();
131+
// Now that analytics is available:
132+
133+
// register the listener with analytics.
134+
AnalyticsConnectorHandle handle =
135+
connector.registerAnalyticsConnectorListener(s, listener);
136+
instance = handle;
137+
138+
// propagate registered event names to analytics.
122139
synchronized (ProxyAnalyticsConnectorHandle.this) {
123-
if (instance == UNREGISTERED) {
124-
return;
125-
}
126-
AnalyticsConnector connector = connectorProvider.get();
127-
AnalyticsConnectorHandle handle =
128-
connector.registerAnalyticsConnectorListener(s, listener);
129-
instance = handle;
130140
if (!eventNames.isEmpty()) {
131141
handle.registerEventNames(eventNames);
132142
eventNames = new HashSet<>();
@@ -136,42 +146,53 @@ private ProxyAnalyticsConnectorHandle(
136146
}
137147

138148
@Override
139-
public synchronized void unregister() {
140-
if (instance == UNREGISTERED) {
149+
public void unregister() {
150+
Object result = instance;
151+
if (result == UNREGISTERED) {
141152
return;
142153
}
143-
if (instance != null) {
144-
AnalyticsConnectorHandle handle = (AnalyticsConnectorHandle) this.instance;
154+
155+
if (result != null) {
156+
AnalyticsConnectorHandle handle = (AnalyticsConnectorHandle) result;
145157
handle.unregister();
146158
}
147159
instance = UNREGISTERED;
148-
eventNames.clear();
160+
synchronized (this) {
161+
eventNames.clear();
162+
}
149163
}
150164

151165
@Override
152-
public synchronized void registerEventNames(@NonNull Set<String> set) {
153-
if (instance == UNREGISTERED) {
166+
public void registerEventNames(@NonNull Set<String> set) {
167+
Object result = instance;
168+
if (result == UNREGISTERED) {
154169
return;
155170
}
156-
if (instance != null) {
157-
AnalyticsConnectorHandle handle = (AnalyticsConnectorHandle) this.instance;
171+
172+
if (result != null) {
173+
AnalyticsConnectorHandle handle = (AnalyticsConnectorHandle) result;
158174
handle.registerEventNames(set);
159175
return;
160176
}
161-
eventNames.addAll(set);
177+
synchronized (this) {
178+
eventNames.addAll(set);
179+
}
162180
}
163181

164182
@Override
165-
public synchronized void unregisterEventNames() {
166-
if (instance == UNREGISTERED) {
183+
public void unregisterEventNames() {
184+
Object result = instance;
185+
if (result == UNREGISTERED) {
167186
return;
168187
}
169-
if (instance != null) {
170-
AnalyticsConnectorHandle handle = (AnalyticsConnectorHandle) this.instance;
188+
if (result != null) {
189+
AnalyticsConnectorHandle handle = (AnalyticsConnectorHandle) result;
171190
handle.unregisterEventNames();
172191
return;
173192
}
174-
eventNames.clear();
193+
synchronized (this) {
194+
eventNames.clear();
195+
}
175196
}
176197
}
177198
}

0 commit comments

Comments
 (0)