From 704ef886ef0af3475b3120519c61cabcb0413afe Mon Sep 17 00:00:00 2001 From: Petru-Mugurel Lingurar Date: Wed, 6 May 2020 14:52:02 +0000 Subject: [PATCH] Bug 1633568 - AdjustHelper can inform more listeners about Attribution changes TelemetryCorePingDelegate was already a listener for AdjustAttribution campaign changes. The new "installation" ping also needs all data about the AdjustAttribution when it changes. To keep a simple API AdjustHelper will now be able to inform more listeners about Attribution changes and will send the entire object, each callback being responsible to extract the data it needs. Differential Revision: https://phabricator.services.mozilla.com/D74072 --- .../gecko/adjust/AdjustBrowserAppDelegate.java | 8 ++++---- .../org/mozilla/gecko/adjust/AdjustHelper.java | 14 ++++++++------ .../gecko/adjust/AdjustHelperInterface.java | 2 +- .../gecko/adjust/AttributionHelperListener.java | 11 +++++++++-- .../org/mozilla/gecko/adjust/StubAdjustHelper.java | 2 +- .../gecko/telemetry/TelemetryCorePingDelegate.java | 7 +++++-- 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustBrowserAppDelegate.java b/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustBrowserAppDelegate.java index aee0bba63a8a2..f160e971def3b 100644 --- a/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustBrowserAppDelegate.java +++ b/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustBrowserAppDelegate.java @@ -13,18 +13,18 @@ import org.mozilla.gecko.util.IntentUtils; public class AdjustBrowserAppDelegate extends BrowserAppDelegate { private final AdjustHelperInterface adjustHelper; - private final AttributionHelperListener attributionHelperListener; + private final AttributionHelperListener[] attributionHelperListeners; - public AdjustBrowserAppDelegate(AttributionHelperListener attributionHelperListener) { + public AdjustBrowserAppDelegate(AttributionHelperListener... attributionHelperListeners) { this.adjustHelper = AdjustConstants.getAdjustHelper(); - this.attributionHelperListener = attributionHelperListener; + this.attributionHelperListeners = attributionHelperListeners; } @Override public void onCreate(BrowserApp browserApp, Bundle savedInstanceState) { adjustHelper.onCreate(browserApp, AdjustConstants.MOZ_INSTALL_TRACKING_ADJUST_SDK_APP_TOKEN, - attributionHelperListener); + attributionHelperListeners); final boolean isInAutomation = IntentUtils.getIsInAutomationFromEnvironment( new SafeIntent(browserApp.getIntent())); diff --git a/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelper.java b/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelper.java index 19399e735bb5d..410a172e77504 100644 --- a/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelper.java +++ b/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelper.java @@ -21,9 +21,9 @@ import org.mozilla.gecko.AppConstants; public class AdjustHelper implements AdjustHelperInterface, OnAttributionChangedListener { private static final String LOGTAG = AdjustHelper.class.getSimpleName(); - private AttributionHelperListener attributionListener; + private AttributionHelperListener[] attributionListeners; - public void onCreate(final Context context, final String maybeAppToken, final AttributionHelperListener listener) { + public void onCreate(final Context context, final String maybeAppToken, final AttributionHelperListener... listeners) { final String environment; final LogLevel logLevel; if (AppConstants.MOZILLA_OFFICIAL) { @@ -37,7 +37,7 @@ public class AdjustHelper implements AdjustHelperInterface, OnAttributionChanged // We've got install tracking turned on -- we better have a token! throw new IllegalArgumentException("maybeAppToken must not be null"); } - attributionListener = listener; + attributionListeners = listeners; AdjustConfig config = new AdjustConfig(context, maybeAppToken, environment); config.setLogLevel(logLevel); config.setOnAttributionChangedListener(this); @@ -62,14 +62,16 @@ public class AdjustHelper implements AdjustHelperInterface, OnAttributionChanged @Override public void onAttributionChanged(AdjustAttribution attribution) { - if (attributionListener == null) { + if (attributionListeners == null) { throw new IllegalStateException("Expected non-null attribution listener."); } if (attribution == null) { - Log.e(LOGTAG, "Adjust attribution is null; skipping campaign id retrieval."); + Log.e(LOGTAG, "Adjust attribution is null. Skipping informing listeners about this."); return; } - attributionListener.onCampaignIdChanged(attribution.campaign); + for (AttributionHelperListener listener: attributionListeners) { + listener.onAttributionChanged(attribution); + } } } diff --git a/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelperInterface.java b/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelperInterface.java index aeb7b4334e9fc..0e4b9ff6455c5 100644 --- a/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelperInterface.java +++ b/mobile/android/base/java/org/mozilla/gecko/adjust/AdjustHelperInterface.java @@ -13,7 +13,7 @@ public interface AdjustHelperInterface { * Register the Application with the Adjust SDK. * @param appToken the (secret!) Adjust SDK per-application token to register with; may be null. */ - void onCreate(final Context context, final String appToken, final AttributionHelperListener listener); + void onCreate(final Context context, final String appToken, final AttributionHelperListener... listener); void onPause(); void onResume(); diff --git a/mobile/android/base/java/org/mozilla/gecko/adjust/AttributionHelperListener.java b/mobile/android/base/java/org/mozilla/gecko/adjust/AttributionHelperListener.java index 6dadd2261d7a5..ada55838707ac 100644 --- a/mobile/android/base/java/org/mozilla/gecko/adjust/AttributionHelperListener.java +++ b/mobile/android/base/java/org/mozilla/gecko/adjust/AttributionHelperListener.java @@ -5,13 +5,20 @@ package org.mozilla.gecko.adjust; +import android.support.annotation.NonNull; + +import com.adjust.sdk.AdjustAttribution; + /** * Because of how our build module dependencies are structured, we aren't able to use * the {@link com.adjust.sdk.OnAttributionChangedListener} directly outside of {@link AdjustHelper}. * If the Adjust SDK is enabled, this listener should be notified when {@link com.adjust.sdk.OnAttributionChangedListener} * is fired (i.e. this listener would be daisy-chained to the Adjust one). The listener also - * inherits thread-safety from GeckoSharedPrefs which is used to store the campaign ID. + * inherits thread-safety from GeckoSharedPrefs which is used to store the attribution. */ public interface AttributionHelperListener { - void onCampaignIdChanged(String campaignId); + /** + * @param attribution - new Adjust attribution configuration. + */ + void onAttributionChanged(@NonNull final AdjustAttribution attribution); } diff --git a/mobile/android/base/java/org/mozilla/gecko/adjust/StubAdjustHelper.java b/mobile/android/base/java/org/mozilla/gecko/adjust/StubAdjustHelper.java index ddfed84bd73b0..386bd97c05e28 100644 --- a/mobile/android/base/java/org/mozilla/gecko/adjust/StubAdjustHelper.java +++ b/mobile/android/base/java/org/mozilla/gecko/adjust/StubAdjustHelper.java @@ -9,7 +9,7 @@ import android.content.Context; import android.content.Intent; public class StubAdjustHelper implements AdjustHelperInterface { - public void onCreate(final Context context, final String appToken, final AttributionHelperListener listener) { + public void onCreate(final Context context, final String appToken, final AttributionHelperListener... listeners) { // Do nothing. } diff --git a/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryCorePingDelegate.java b/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryCorePingDelegate.java index fa00a37a7c163..5b54657d319c3 100644 --- a/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryCorePingDelegate.java +++ b/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryCorePingDelegate.java @@ -9,11 +9,14 @@ package org.mozilla.gecko.telemetry; import android.accessibilityservice.AccessibilityServiceInfo; import android.content.Context; import android.content.SharedPreferences; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.WorkerThread; import android.util.Log; import android.view.accessibility.AccessibilityManager; +import com.adjust.sdk.AdjustAttribution; + import org.json.JSONArray; import org.json.JSONException; import org.mozilla.gecko.BrowserApp; @@ -273,7 +276,7 @@ public class TelemetryCorePingDelegate extends BrowserAppDelegateWithReference } @Override - public void onCampaignIdChanged(String campaignId) { - CampaignIdMeasurements.updateCampaignIdPref(getBrowserApp(), campaignId); + public void onAttributionChanged(@NonNull final AdjustAttribution attribution) { + CampaignIdMeasurements.updateCampaignIdPref(getBrowserApp(), attribution.campaign); } } -- GitLab