Skip to content

Commit 5c2673f

Browse files
committed
Merge pull request #58 from adjust/deeplink
Deeplink
2 parents ae14b69 + 9ce006c commit 5c2673f

19 files changed

+182
-106
lines changed

Adjust/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ android {
2525
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
2626
defaultConfig {
2727
versionCode 11
28-
versionName '3.3.6'
28+
versionName '3.4.0'
2929
minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)
3030
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
3131
}

Adjust/src/com/adjust/sdk/ActivityHandler.java

Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,20 @@
2525
import java.io.OptionalDataException;
2626
import java.lang.ref.WeakReference;
2727
import java.util.HashMap;
28-
import java.util.Locale;
28+
import java.util.List;
2929
import java.util.Map;
3030
import java.util.concurrent.Executors;
3131
import java.util.concurrent.ScheduledExecutorService;
3232
import java.util.concurrent.TimeUnit;
3333

3434
import android.app.Activity;
3535
import android.content.Context;
36+
import android.content.Intent;
3637
import android.content.SharedPreferences;
3738
import android.content.pm.ApplicationInfo;
3839
import android.content.pm.PackageManager;
3940
import android.content.pm.PackageManager.NameNotFoundException;
41+
import android.content.pm.ResolveInfo;
4042
import android.net.Uri;
4143
import android.os.Bundle;
4244
import android.os.Handler;
@@ -158,8 +160,8 @@ public void trackRevenue(double amountInCents, String eventToken, Map<String, St
158160
sessionHandler.sendMessage(message);
159161
}
160162

161-
public void finishedTrackingActivity(final ResponseData responseData) {
162-
if (onFinishedListener == null) {
163+
public void finishedTrackingActivity(final ResponseData responseData, final String deepLink) {
164+
if (onFinishedListener == null && deepLink == null) {
163165
return;
164166
}
165167

@@ -168,7 +170,8 @@ public void finishedTrackingActivity(final ResponseData responseData) {
168170
@Override
169171
public void run() {
170172
try {
171-
onFinishedListener.onFinishedTracking(responseData);
173+
runDelegateMain(responseData);
174+
launchDeepLinkMain(deepLink);
172175
} catch (NullPointerException e) {
173176
}
174177
}
@@ -344,18 +347,16 @@ private void startInternal() {
344347
transferSessionPackage();
345348
activityState.resetSessionAttributes(now);
346349
writeActivityState();
347-
logger.debug(String.format(Locale.US,
348-
"Session %d", activityState.sessionCount));
350+
logger.debug("Session %d", activityState.sessionCount);
349351
return;
350352
}
351353

352354
// new subsession
353355
if (lastInterval > SUBSESSION_INTERVAL) {
354356
activityState.subsessionCount++;
355-
logger.info(String.format(Locale.US,
356-
"Started subsession %d of session %d",
357-
activityState.subsessionCount,
358-
activityState.sessionCount));
357+
logger.info("Started subsession %d of session %d",
358+
activityState.subsessionCount,
359+
activityState.sessionCount);
359360
}
360361
activityState.sessionLength += lastInterval;
361362
activityState.lastActivity = now;
@@ -393,13 +394,13 @@ private void trackEventInternal(PackageBuilder eventBuilder) {
393394
packageHandler.addPackage(eventPackage);
394395

395396
if (eventBuffering) {
396-
logger.info(String.format("Buffered event %s", eventPackage.getSuffix()));
397+
logger.info("Buffered event %s", eventPackage.getSuffix());
397398
} else {
398399
packageHandler.sendFirstPackage();
399400
}
400401

401402
writeActivityState();
402-
logger.debug(String.format(Locale.US, "Event %d", activityState.eventCount));
403+
logger.debug("Event %d", activityState.eventCount);
403404
}
404405

405406
private void trackRevenueInternal(PackageBuilder revenueBuilder) {
@@ -423,13 +424,13 @@ private void trackRevenueInternal(PackageBuilder revenueBuilder) {
423424
packageHandler.addPackage(eventPackage);
424425

425426
if (eventBuffering) {
426-
logger.info(String.format("Buffered revenue %s", eventPackage.getSuffix()));
427+
logger.info("Buffered revenue %s", eventPackage.getSuffix());
427428
} else {
428429
packageHandler.sendFirstPackage();
429430
}
430431

431432
writeActivityState();
432-
logger.debug(String.format(Locale.US, "Event %d (revenue)", activityState.eventCount));
433+
logger.debug("Event %d (revenue)", activityState.eventCount);
433434
}
434435

435436
private void readOpenUrlInternal(Uri url) {
@@ -472,7 +473,35 @@ private void readOpenUrlInternal(Uri url) {
472473
packageHandler.addPackage(reattributionPackage);
473474
packageHandler.sendFirstPackage();
474475

475-
logger.debug(String.format("Reattribution %s", adjustDeepLinks.toString()));
476+
logger.debug("Reattribution %s", adjustDeepLinks.toString());
477+
}
478+
479+
private void runDelegateMain(ResponseData responseData) {
480+
if (onFinishedListener == null) return;
481+
if (responseData == null) return;
482+
onFinishedListener.onFinishedTracking(responseData);
483+
}
484+
485+
private void launchDeepLinkMain(String deepLink) {
486+
if (deepLink == null) return;
487+
488+
Uri location = Uri.parse(deepLink);
489+
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
490+
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
491+
492+
// Verify it resolves
493+
PackageManager packageManager = context.getPackageManager();
494+
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
495+
boolean isIntentSafe = activities.size() > 0;
496+
497+
// Start an activity if it's safe
498+
if (!isIntentSafe) {
499+
logger.error("Unable to open deep link (%s)", deepLink);
500+
return;
501+
}
502+
503+
logger.info("Open deep link (%s)", deepLink);
504+
context.startActivity(mapIntent);
476505
}
477506

478507
private boolean canTrackEvent(PackageBuilder revenueBuilder) {
@@ -517,7 +546,7 @@ private void readActivityState() {
517546

518547
try {
519548
activityState = (ActivityState) objectStream.readObject();
520-
logger.debug(String.format("Read activity state: %s uuid:%s", activityState, activityState.uuid));
549+
logger.debug("Read activity state: %s uuid:%s", activityState, activityState.uuid);
521550
return;
522551
} catch (ClassNotFoundException e) {
523552
logger.error("Failed to find activity state class");
@@ -534,7 +563,7 @@ private void readActivityState() {
534563
} catch (FileNotFoundException e) {
535564
logger.verbose("Activity state file not found");
536565
} catch (Exception e) {
537-
logger.error(String.format("Failed to open activity state file for reading (%s)", e));
566+
logger.error("Failed to open activity state file for reading (%s)", e);
538567
}
539568

540569
// start with a fresh activity state in case of any exception
@@ -549,15 +578,15 @@ private void writeActivityState() {
549578

550579
try {
551580
objectStream.writeObject(activityState);
552-
logger.debug(String.format("Wrote activity state: %s", activityState));
581+
logger.debug("Wrote activity state: %s", activityState);
553582
} catch (NotSerializableException e) {
554583
logger.error("Failed to serialize activity state");
555584
} finally {
556585
objectStream.close();
557586
}
558587

559588
} catch (Exception e) {
560-
logger.error(String.format("Failed to open activity state for writing (%s)", e));
589+
logger.error("Failed to open activity state for writing (%s)", e);
561590
}
562591
}
563592

@@ -593,7 +622,7 @@ private void injectReferrer(PackageBuilder builder) {
593622
builder.setReferrer(preferences.getString(ReferrerReceiver.REFERRER_KEY, null));
594623
}
595624
catch (Exception e) {
596-
logger.error(String.format("Failed to inject referrer (%s)", e));
625+
logger.error("Failed to inject referrer (%s)", e);
597626
}
598627
}
599628

@@ -674,7 +703,7 @@ private void setEnvironment(String env) {
674703
"PRODUCTION: Adjust is running in Production mode. Use this setting only for the build that you want to publish. Set the environment to `sandbox` if you want to test your app!");
675704
logger.setLogLevel(Logger.LogLevel.ASSERT);
676705
} else {
677-
logger.Assert(String.format("Malformed environment '%s'", environment));
706+
logger.Assert("Malformed environment '%s'", environment);
678707
logger.setLogLevel(Logger.LogLevel.ASSERT);
679708
environment = Constants.MALFORMED;
680709
}
@@ -690,7 +719,7 @@ private void setEventBuffering(boolean buffering) {
690719
private void setDefaultTracker(String tracker) {
691720
defaultTracker = tracker;
692721
if (defaultTracker != null) {
693-
logger.info(String.format("Default tracker: '%s'", defaultTracker));
722+
logger.info("Default tracker: '%s'", defaultTracker);
694723
}
695724
}
696725

@@ -710,7 +739,7 @@ private Bundle getApplicationBundle() {
710739
} catch (NameNotFoundException e) {
711740
logger.error("ApplicationInfo not found");
712741
} catch (Exception e) {
713-
logger.error(String.format("Failed to get ApplicationBundle (%s)", e));
742+
logger.error("Failed to get ApplicationBundle (%s)", e);
714743
}
715744
return null;
716745
}
@@ -746,7 +775,7 @@ private boolean checkAppTokenNotNull(String appToken) {
746775

747776
private boolean checkAppTokenLength(String appToken) {
748777
if (12 != appToken.length()) {
749-
logger.error(String.format("Malformed App Token '%s'", appToken));
778+
logger.error("Malformed App Token '%s'", appToken);
750779
return false;
751780
}
752781
return true;

Adjust/src/com/adjust/sdk/ActivityState.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ private void readObject(ObjectInputStream stream) throws NotActiveException, IOE
104104
// add new fields here
105105
} catch (Exception e) {
106106
Logger logger = AdjustFactory.getLogger();
107-
logger.debug(String.format("Unable to read new field in migration device with error (%s)",
108-
e.getMessage()));
107+
logger.debug("Unable to read new field in migration device with error (%s)",
108+
e.getMessage());
109109
}
110110

111111
// create UUID for migrating devices

Adjust/src/com/adjust/sdk/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public interface Constants {
1919
int THIRTY_MINUTES = 30 * ONE_MINUTE;
2020

2121
String BASE_URL = "https://app.adjust.io";
22-
String CLIENT_SDK = "android3.3.6";
22+
String CLIENT_SDK = "android3.4.0";
2323
String LOGTAG = "Adjust";
2424

2525
String SESSION_STATE_FILENAME = "AdjustIoActivityState";

Adjust/src/com/adjust/sdk/IPackageHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.adjust.sdk;
22

3+
import org.json.JSONObject;
4+
35
public interface IPackageHandler {
46
public void addPackage(ActivityPackage pack);
57

@@ -17,5 +19,5 @@ public interface IPackageHandler {
1719

1820
public boolean dropsOfflineActivities();
1921

20-
public void finishedTrackingActivity(ActivityPackage activityPackage, ResponseData responseData);
22+
public void finishedTrackingActivity(ActivityPackage activityPackage, ResponseData responseData, JSONObject jsonResponse);
2123
}

Adjust/src/com/adjust/sdk/LogCatLogger.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99

1010
package com.adjust.sdk;
1111

12+
import static com.adjust.sdk.Constants.LOGTAG;
13+
1214
import java.util.Locale;
15+
1316
import android.util.Log;
14-
import static com.adjust.sdk.Constants.LOGTAG;
1517

1618
public class LogCatLogger implements Logger {
1719

@@ -32,48 +34,47 @@ public void setLogLevelString(String logLevelString) {
3234
try {
3335
setLogLevel(LogLevel.valueOf(logLevelString.toUpperCase(Locale.US)));
3436
} catch (IllegalArgumentException iae) {
35-
error(String.format("Malformed logLevel '%s', falling back to 'info'", logLevelString));
37+
error("Malformed logLevel '%s', falling back to 'info'", logLevelString);
3638
}
3739
}
3840
}
3941

4042
@Override
41-
public void verbose(String message) {
43+
public void verbose(String message, Object ...parameters) {
4244
if (logLevel.androidLogLevel <= Log.VERBOSE) {
43-
Log.v(LOGTAG, message);
45+
Log.v(LOGTAG, String.format(message, parameters));
4446
}
4547
}
4648

4749
@Override
48-
public void debug(String message) {
50+
public void debug(String message, Object ...parameters) {
4951
if (logLevel.androidLogLevel <= Log.DEBUG) {
50-
Log.d(LOGTAG, message);
52+
Log.d(LOGTAG, String.format(message, parameters));
5153
}
5254
}
5355

5456
@Override
55-
public void info(String message) {
57+
public void info(String message, Object ...parameters) {
5658
if (logLevel.androidLogLevel <= Log.INFO) {
57-
Log.i(LOGTAG, message);
59+
Log.i(LOGTAG, String.format(message, parameters));
5860
}
5961
}
6062

6163
@Override
62-
public void warn(String message) {
64+
public void warn(String message, Object ...parameters) {
6365
if (logLevel.androidLogLevel <= Log.WARN) {
64-
Log.w(LOGTAG, message);
66+
Log.w(LOGTAG, String.format(message, parameters));
6567
}
6668
}
6769

6870
@Override
69-
public void error(String message) {
71+
public void error(String message, Object ...parameters) {
7072
if (logLevel.androidLogLevel <= Log.ERROR) {
71-
Log.e(LOGTAG, message);
73+
Log.e(LOGTAG, String.format(message, parameters));
7274
}
7375
}
7476

7577
@Override
76-
public void Assert(String message) {
77-
Log.println(Log.ASSERT, LOGTAG, message);
78+
public void Assert(String message, Object ...parameters) {
7879
}
7980
}

Adjust/src/com/adjust/sdk/Logger.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ public int getAndroidLogLevel() {
2121

2222
public void setLogLevelString(String logLevelString);
2323

24-
public void verbose(String message);
24+
public void verbose(String message, Object ...parameters);
2525

26-
public void debug(String message);
26+
public void debug(String message, Object ...parameters);
2727

28-
public void info(String message);
28+
public void info(String message, Object ...parameters);
2929

30-
public void warn(String message);
30+
public void warn(String message, Object ...parameters);
3131

32-
public void error(String message);
32+
public void error(String message, Object ...parameters);
3333

34-
public void Assert(String message);
34+
public void Assert(String message, Object ...parameters);
3535

3636
}

Adjust/src/com/adjust/sdk/PackageBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public boolean isValidForEvent() {
166166
public boolean isValidForRevenue() {
167167
if (amountInCents < 0.0) {
168168
Logger logger = AdjustFactory.getLogger();
169-
logger.error(String.format(Locale.US, "Invalid amount %f", amountInCents));
169+
logger.error("Invalid amount %f", amountInCents);
170170
return false;
171171
}
172172
if (eventToken == null) {
@@ -233,7 +233,7 @@ public ActivityPackage buildReattributionPackage() {
233233
private boolean isEventTokenValid() {
234234
if (6 != eventToken.length()) {
235235
Logger logger = AdjustFactory.getLogger();
236-
logger.error(String.format("Malformed Event Token '%s'", eventToken));
236+
logger.error("Malformed Event Token '%s'", eventToken);
237237
return false;
238238
}
239239
return true;

0 commit comments

Comments
 (0)