@@ -53,7 +53,7 @@ public class OptimizelyClient {
5353 private final Logger logger ;
5454
5555 @ Nullable private Optimizely optimizely ;
56- @ NonNull private Map <String , String > defaultAttributes = new HashMap <>();
56+ @ NonNull private Map <String , ? > defaultAttributes = new HashMap <>();
5757
5858 OptimizelyClient (@ Nullable Optimizely optimizely , @ NonNull Logger logger ) {
5959 this .optimizely = optimizely ;
@@ -72,15 +72,15 @@ public class OptimizelyClient {
7272 * This is set by the Optimizely manager and includes things like os version and sdk version.
7373 * @param attrs a map of default attributes.
7474 */
75- protected void setDefaultAttributes (@ NonNull Map <String , String > attrs ) {
75+ protected void setDefaultAttributes (@ NonNull Map <String , ? > attrs ) {
7676 this .defaultAttributes = attrs ;
7777 }
7878
7979 /**
8080 * Return the default attributes map
8181 * @return the map of default attributes
8282 */
83- public @ NonNull Map <String , String > getDefaultAttributes () {
83+ public @ NonNull Map <String , ? > getDefaultAttributes () {
8484 return this .defaultAttributes ;
8585 }
8686
@@ -90,11 +90,15 @@ protected void setDefaultAttributes(@NonNull Map<String, String> attrs) {
9090 * @param attrs attributes that will be combined with default attributes.
9191 * @return a new map of both the default attributes and attributes passed in.
9292 */
93- private Map <String , String > getAllAttributes (@ NonNull Map <String , String > attrs ) {
94- Map <String ,String > combinedMap = new HashMap <>(defaultAttributes );
93+ private Map <String , ? > getAllAttributes (@ NonNull Map <String , ? > attrs ) {
94+ Map <String , Object > combinedMap = new HashMap <>(defaultAttributes );
9595
9696 // this essentially overrides defaultAttributes if the attrs passed in have the same key.
97- combinedMap .putAll (attrs );
97+ if (attrs != null ) {
98+ combinedMap .putAll (attrs );
99+ } else if (combinedMap .isEmpty ()) {
100+ combinedMap = null ;
101+ }
98102
99103 return combinedMap ;
100104 }
@@ -128,7 +132,7 @@ private Map<String, String> getAllAttributes(@NonNull Map<String, String> attrs)
128132 @ SuppressWarnings ("WeakerAccess" )
129133 public @ Nullable Variation activate (@ NonNull String experimentKey ,
130134 @ NonNull String userId ,
131- @ NonNull Map <String , String > attributes ) {
135+ @ NonNull Map <String , ? > attributes ) {
132136 if (isValid ()) {
133137 return optimizely .activate (experimentKey , userId , getAllAttributes (attributes ));
134138 } else {
@@ -156,7 +160,10 @@ private Map<String, String> getAllAttributes(@NonNull Map<String, String> attrs)
156160 * @return True if the OptimizelyClient instance was instantiated correctly
157161 */
158162 public boolean isValid () {
159- return optimizely != null ;
163+ if (optimizely != null )
164+ return optimizely .isValid ();
165+ else
166+ return false ;
160167 }
161168
162169 /**
@@ -185,7 +192,7 @@ public void track(@NonNull String eventName,
185192 */
186193 public void track (@ NonNull String eventName ,
187194 @ NonNull String userId ,
188- @ NonNull Map <String , String > attributes ) throws UnknownEventTypeException {
195+ @ NonNull Map <String , ? > attributes ) throws UnknownEventTypeException {
189196 if (isValid ()) {
190197 optimizely .track (eventName , userId , getAllAttributes (attributes ));
191198
@@ -204,7 +211,7 @@ public void track(@NonNull String eventName,
204211 */
205212 public void track (@ NonNull String eventName ,
206213 @ NonNull String userId ,
207- @ NonNull Map <String , String > attributes ,
214+ @ NonNull Map <String , ? > attributes ,
208215 @ NonNull Map <String , ?> eventTags ) throws UnknownEventTypeException {
209216 if (isValid ()) {
210217 optimizely .track (eventName , userId , getAllAttributes (attributes ), eventTags );
@@ -245,7 +252,7 @@ public void track(@NonNull String eventName,
245252 @ SuppressWarnings ("WeakerAccess" )
246253 public @ Nullable Variation getVariation (@ NonNull String experimentKey ,
247254 @ NonNull String userId ,
248- @ NonNull Map <String , String > attributes ) {
255+ @ NonNull Map <String , ? > attributes ) {
249256 if (isValid ()) {
250257 return optimizely .getVariation (experimentKey , userId , getAllAttributes (attributes ));
251258 } else {
@@ -310,7 +317,7 @@ public boolean setForcedVariation(@NonNull String experimentKey,
310317 * @return List of the feature keys that are enabled for the user if the userId is empty it will
311318 * return Empty List.
312319 */
313- public List <String > getEnabledFeatures (@ NonNull String userId , @ NonNull Map <String , String > attributes ) {
320+ public List <String > getEnabledFeatures (@ NonNull String userId , @ NonNull Map <String , ? > attributes ) {
314321 if (isValid ()) {
315322 return optimizely .getEnabledFeatures (userId , attributes );
316323 } else {
@@ -355,7 +362,7 @@ Boolean isFeatureEnabled(@NonNull String featureKey,
355362 */
356363 public @ NonNull Boolean isFeatureEnabled (@ NonNull String featureKey ,
357364 @ NonNull String userId ,
358- @ NonNull Map <String , String > attributes ) {
365+ @ NonNull Map <String , ? > attributes ) {
359366 if (isValid ()) {
360367 return optimizely .isFeatureEnabled (featureKey , userId , attributes );
361368 } else {
@@ -401,7 +408,7 @@ Boolean getFeatureVariableBoolean(@NonNull String featureKey,
401408 Boolean getFeatureVariableBoolean (@ NonNull String featureKey ,
402409 @ NonNull String variableKey ,
403410 @ NonNull String userId ,
404- @ NonNull Map <String , String > attributes ) {
411+ @ NonNull Map <String , ? > attributes ) {
405412 if (isValid ()) {
406413 return optimizely .getFeatureVariableBoolean (featureKey , variableKey , userId , attributes );
407414 } else {
@@ -445,7 +452,7 @@ Double getFeatureVariableDouble(@NonNull String featureKey,
445452 Double getFeatureVariableDouble (@ NonNull String featureKey ,
446453 @ NonNull String variableKey ,
447454 @ NonNull String userId ,
448- @ NonNull Map <String , String > attributes ) {
455+ @ NonNull Map <String , ? > attributes ) {
449456 if (isValid ()) {
450457 return optimizely .getFeatureVariableDouble (featureKey , variableKey , userId , attributes );
451458 } else {
@@ -489,7 +496,7 @@ Integer getFeatureVariableInteger(@NonNull String featureKey,
489496 Integer getFeatureVariableInteger (@ NonNull String featureKey ,
490497 @ NonNull String variableKey ,
491498 @ NonNull String userId ,
492- @ NonNull Map <String , String > attributes ) {
499+ @ NonNull Map <String , ? > attributes ) {
493500 if (isValid ()) {
494501 return optimizely .getFeatureVariableInteger (featureKey , variableKey , userId , attributes );
495502 } else {
@@ -533,7 +540,7 @@ String getFeatureVariableString(@NonNull String featureKey,
533540 String getFeatureVariableString (@ NonNull String featureKey ,
534541 @ NonNull String variableKey ,
535542 @ NonNull String userId ,
536- @ NonNull Map <String , String > attributes ) {
543+ @ NonNull Map <String , ? > attributes ) {
537544 if (isValid ()) {
538545 return optimizely .getFeatureVariableString (featureKey , variableKey , userId , attributes );
539546 } else {
0 commit comments