Skip to content

Commit f861c4b

Browse files
uercegshashanksu
authored andcommitted
refac: change deep link resolution callback caching logic
1 parent 0c13c49 commit f861c4b

File tree

6 files changed

+72
-35
lines changed

6 files changed

+72
-35
lines changed

Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -432,11 +432,21 @@ private boolean isEnabledI() {
432432
}
433433

434434
@Override
435-
public void readOpenUrl(final Uri url, final OnDeeplinkResolvedListener callback, final long clickTime) {
435+
public void readOpenUrl(final Uri url, final long clickTime) {
436436
executor.submit(new Runnable() {
437437
@Override
438438
public void run() {
439-
readOpenUrlI(url, callback, clickTime);
439+
readOpenUrlI(url, clickTime);
440+
}
441+
});
442+
}
443+
444+
public void readOpenUrl(final Uri url, final long clickTime, final OnDeeplinkResolvedListener callback) {
445+
this.cachedDeeplinkResolutionCallback = callback;
446+
executor.submit(new Runnable() {
447+
@Override
448+
public void run() {
449+
readOpenUrlI(url, clickTime);
440450
}
441451
});
442452
}
@@ -862,6 +872,7 @@ public void run(ActivityHandler activityHandler) {
862872
logger.info("Default tracker: '%s'", adjustConfig.defaultTracker);
863873
}
864874

875+
// push token
865876
if (adjustConfig.pushToken != null) {
866877
logger.info("Push token: '%s'", adjustConfig.pushToken);
867878
if (internalState.hasFirstSdkStartOcurred()) {
@@ -880,6 +891,11 @@ public void run(ActivityHandler activityHandler) {
880891
}
881892
}
882893

894+
// cached deep link resolution callback
895+
if (this.cachedDeeplinkResolutionCallback == null) {
896+
this.cachedDeeplinkResolutionCallback = adjustConfig.cachedDeeplinkResolutionCallback;
897+
}
898+
883899
// GDPR
884900
if (internalState.hasFirstSdkStartOcurred()) {
885901
SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getDefaultInstance(getContext());
@@ -1405,7 +1421,6 @@ private void processCachedDeeplinkI() {
14051421

14061422
SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getDefaultInstance(getContext());
14071423
String cachedDeeplinkUrl = sharedPreferencesManager.getDeeplinkUrl();
1408-
OnDeeplinkResolvedListener callback = sharedPreferencesManager.getCachedDeeplinkResolutionCallback();
14091424
long cachedDeeplinkClickTime = sharedPreferencesManager.getDeeplinkClickTime();
14101425

14111426
if (cachedDeeplinkUrl == null) {
@@ -1415,7 +1430,7 @@ private void processCachedDeeplinkI() {
14151430
return;
14161431
}
14171432

1418-
readOpenUrl(Uri.parse(cachedDeeplinkUrl), callback, cachedDeeplinkClickTime);
1433+
readOpenUrl(Uri.parse(cachedDeeplinkUrl), cachedDeeplinkClickTime);
14191434

14201435
sharedPreferencesManager.removeDeeplink();
14211436
}
@@ -1526,7 +1541,14 @@ private void launchSdkClickResponseTasksI(SdkClickResponseData sdkClickResponseD
15261541

15271542
if (!TextUtils.isEmpty(sdkClickResponseData.resolvedDeeplink)) {
15281543
if (cachedDeeplinkResolutionCallback != null) {
1529-
cachedDeeplinkResolutionCallback.onDeeplinkResolved(sdkClickResponseData.resolvedDeeplink);
1544+
Runnable runnable = new Runnable() {
1545+
@Override
1546+
public void run() {
1547+
cachedDeeplinkResolutionCallback.onDeeplinkResolved(sdkClickResponseData.resolvedDeeplink);
1548+
cachedDeeplinkResolutionCallback = null;
1549+
}
1550+
};
1551+
handler.post(runnable);
15301552
}
15311553
}
15321554
}
@@ -1972,7 +1994,7 @@ private boolean isValidReferrerDetails(final ReferrerDetails referrerDetails) {
19721994
return referrerDetails.installReferrer.length() != 0;
19731995
}
19741996

1975-
private void readOpenUrlI(Uri url, OnDeeplinkResolvedListener callback, long clickTime) {
1997+
private void readOpenUrlI(Uri url, long clickTime) {
19761998
if (!isEnabledI()) {
19771999
return;
19782000
}
@@ -1994,8 +2016,6 @@ private void readOpenUrlI(Uri url, OnDeeplinkResolvedListener callback, long cli
19942016
return;
19952017
}
19962018

1997-
cachedDeeplinkResolutionCallback = callback;
1998-
19992019
sdkClickHandler.sendSdkClick(sdkClickPackage);
20002020
}
20012021

Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public static void appWillOpenUrl(Uri url) {
128128
*/
129129
public static void appWillOpenUrl(Uri url, Context context) {
130130
AdjustInstance adjustInstance = Adjust.getDefaultInstance();
131-
adjustInstance.appWillOpenUrl(url, null, extractApplicationContext(context));
131+
adjustInstance.appWillOpenUrl(url, extractApplicationContext(context));
132132
}
133133

134134
/**
@@ -140,7 +140,7 @@ public static void appWillOpenUrl(Uri url, Context context) {
140140
*/
141141
public static void processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback) {
142142
AdjustInstance adjustInstance = Adjust.getDefaultInstance();
143-
adjustInstance.appWillOpenUrl(url, callback, extractApplicationContext(context));
143+
adjustInstance.processDeeplink(url, extractApplicationContext(context), callback);
144144
}
145145

146146
/**

Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class AdjustConfig {
4747
boolean finalAttributionEnabled;
4848
String fbAppId;
4949
boolean readDeviceInfoOnceEnabled;
50+
OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback;
5051

5152
public static final String ENVIRONMENT_SANDBOX = "sandbox";
5253
public static final String ENVIRONMENT_PRODUCTION = "production";

Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public PreLaunchActions() {
4949

5050
private PreLaunchActions preLaunchActions = new PreLaunchActions();
5151

52+
private OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback;
53+
5254
/**
5355
* Base path for Adjust packages.
5456
*/
@@ -96,6 +98,7 @@ public void onCreate(final AdjustConfig adjustConfig) {
9698
adjustConfig.gdprPath = this.gdprPath;
9799
adjustConfig.subscriptionPath = this.subscriptionPath;
98100
adjustConfig.purchaseVerificationPath = this.purchaseVerificationPath;
101+
adjustConfig.cachedDeeplinkResolutionCallback = cachedDeeplinkResolutionCallback;
99102

100103
activityHandler = AdjustFactory.getActivityHandler(adjustConfig);
101104
setSendingReferrersAsNotSent(adjustConfig.context);
@@ -167,17 +170,16 @@ public void appWillOpenUrl(final Uri url) {
167170
return;
168171
}
169172
long clickTime = System.currentTimeMillis();
170-
activityHandler.readOpenUrl(url, null, clickTime);
173+
activityHandler.readOpenUrl(url, clickTime);
171174
}
172175

173176
/**
174-
* Process the deep link that has opened an app and potentially get a resolved link.
177+
* Called to process deep link.
175178
*
176-
* @param url Deep link URL to process
177-
* @param callback Callback where either resolved or echoed deep link will be sent.
179+
* @param url Deep link URL to process
178180
* @param context Application context
179181
*/
180-
public void appWillOpenUrl(final Uri url, final OnDeeplinkResolvedListener callback, final Context context) {
182+
public void appWillOpenUrl(final Uri url, final Context context) {
181183
// Check for deep link validity. If invalid, return.
182184
if (url == null || url.toString().length() == 0) {
183185
AdjustFactory.getLogger().warn(
@@ -187,11 +189,37 @@ public void appWillOpenUrl(final Uri url, final OnDeeplinkResolvedListener callb
187189

188190
long clickTime = System.currentTimeMillis();
189191
if (!checkActivityHandler("appWillOpenUrl", true)) {
190-
saveDeeplink(url, callback, clickTime, context);
192+
saveDeeplink(url, clickTime, context);
193+
return;
194+
}
195+
196+
activityHandler.readOpenUrl(url, clickTime);
197+
}
198+
199+
/**
200+
* Process the deep link that has opened an app and potentially get a resolved link.
201+
*
202+
* @param url Deep link URL to process
203+
* @param callback Callback where either resolved or echoed deep link will be sent.
204+
* @param context Application context
205+
*/
206+
public void processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback) {
207+
// if resolution result is not wanted, fallback to default method
208+
if (callback == null) {
209+
appWillOpenUrl(url, context);
210+
return;
211+
}
212+
213+
// if deep link processing is triggered prior to SDK being initialized
214+
long clickTime = System.currentTimeMillis();
215+
if (!checkActivityHandler("processDeeplink", true)) {
216+
saveDeeplink(url, clickTime, context);
217+
this.cachedDeeplinkResolutionCallback = callback;
191218
return;
192219
}
193220

194-
activityHandler.readOpenUrl(url, callback, clickTime);
221+
// if deep link processing was triggered with SDK being initialized
222+
activityHandler.readOpenUrl(url, clickTime, callback);
195223
}
196224

197225
/**
@@ -633,13 +661,11 @@ private void saveDisableThirdPartySharing(final Context context) {
633661
* Save deep link to shared preferences.
634662
*
635663
* @param deeplink Deeplink Uri object
636-
* @param callback Callback to obtain link resolution result
637664
* @param clickTime Time when appWillOpenUrl(Uri, Context) method was called
638665
* @param context Application context
639666
*/
640-
private void saveDeeplink(final Uri deeplink, final OnDeeplinkResolvedListener callback,
641-
final long clickTime, final Context context) {
642-
SharedPreferencesManager.getDefaultInstance(context).saveDeeplink(deeplink, callback, clickTime);
667+
private void saveDeeplink(final Uri deeplink, final long clickTime, final Context context) {
668+
SharedPreferencesManager.getDefaultInstance(context).saveDeeplink(deeplink, clickTime);
643669
}
644670

645671
/**

Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ public interface IActivityHandler {
2323

2424
boolean isEnabled();
2525

26-
void readOpenUrl(Uri url, OnDeeplinkResolvedListener callback, long clickTime);
26+
void readOpenUrl(Uri url, long clickTime);
27+
28+
void readOpenUrl(Uri url, long clickTime, OnDeeplinkResolvedListener callback);
2729

2830
boolean updateAttributionI(AdjustAttribution attribution);
2931

Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,6 @@ public class SharedPreferencesManager {
8585
*/
8686
private static SharedPreferencesManager defaultInstance;
8787

88-
/**
89-
* Deeplink resolution callback instance.
90-
*/
91-
private static OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback;
92-
9388
/**
9489
* Default constructor.
9590
*
@@ -389,33 +384,26 @@ public synchronized void removeDisableThirdPartySharing() {
389384
remove(PREFS_KEY_DISABLE_THIRD_PARTY_SHARING);
390385
}
391386

392-
public synchronized void saveDeeplink(final Uri deeplink, final OnDeeplinkResolvedListener deeplinkResolutionCallback, final long clickTime) {
387+
public synchronized void saveDeeplink(final Uri deeplink, final long clickTime) {
393388
if (deeplink == null) {
394389
return;
395390
}
396391

397392
saveString(PREFS_KEY_DEEPLINK_URL, deeplink.toString());
398393
saveLong(PREFS_KEY_DEEPLINK_CLICK_TIME, clickTime);
399-
400-
cachedDeeplinkResolutionCallback = deeplinkResolutionCallback;
401394
}
402395

403396
public synchronized String getDeeplinkUrl() {
404397
return getString(PREFS_KEY_DEEPLINK_URL);
405398
}
406399

407-
public synchronized OnDeeplinkResolvedListener getCachedDeeplinkResolutionCallback() {
408-
return cachedDeeplinkResolutionCallback;
409-
}
410-
411400
public synchronized long getDeeplinkClickTime() {
412401
return getLong(PREFS_KEY_DEEPLINK_CLICK_TIME, -1);
413402
}
414403

415404
public synchronized void removeDeeplink() {
416405
remove(PREFS_KEY_DEEPLINK_URL);
417406
remove(PREFS_KEY_DEEPLINK_CLICK_TIME);
418-
cachedDeeplinkResolutionCallback = null;
419407
}
420408

421409
/**

0 commit comments

Comments
 (0)