Skip to content

Commit 0044686

Browse files
committed
Suggested modifications
1. InAppManager no more holds array of allowedProtocols. Its always accessed from IterableConfig. 2. `isUrlOpenAllowed` is now a common utility method in IterableUtil 3. Modified test methods to accomodate the changes
1 parent d980fce commit 0044686

File tree

8 files changed

+28
-46
lines changed

8 files changed

+28
-46
lines changed

iterableapi/src/main/java/com/iterable/iterableapi/IterableActionRunner.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import android.util.Log;
1313

14-
import java.util.Arrays;
1514
import java.util.List;
1615

1716
class IterableActionRunner {
@@ -68,7 +67,7 @@ boolean executeAction(@NonNull Context context, @Nullable IterableAction action,
6867
*/
6968
private boolean openUri(@NonNull Context context, @NonNull Uri uri, @NonNull IterableActionContext actionContext, String[] allowedProtocols) {
7069
// Handle URL: check for deep links within the app
71-
if (!isUrlOpenAllowed(uri.toString(), allowedProtocols)) {
70+
if (!IterableUtil.isUrlOpenAllowed(uri.toString(), allowedProtocols)) {
7271
IterableLogger.e(TAG, "URL was not in the allowed protocols list");
7372
return false;
7473
}
@@ -120,19 +119,5 @@ private boolean callCustomActionIfSpecified(@NonNull IterableAction action, @Non
120119
}
121120
return false;
122121
}
123-
124-
private static boolean isUrlOpenAllowed(@NonNull String url, @NonNull String[] allowedProtocols) {
125-
if (url.startsWith("https")) {
126-
return true;
127-
}
128-
129-
for (String protocol : allowedProtocols) {
130-
if (url.startsWith(protocol)) {
131-
return true;
132-
}
133-
}
134-
135-
return false;
136-
}
137122
}
138123
}

iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public static void initialize(@NonNull Context context, @NonNull String apiKey,
299299

300300
if (sharedInstance.inAppManager == null) {
301301
sharedInstance.inAppManager = new IterableInAppManager(sharedInstance, sharedInstance.config.inAppHandler,
302-
sharedInstance.config.inAppDisplayInterval, sharedInstance.config.allowedProtocols);
302+
sharedInstance.config.inAppDisplayInterval);
303303
}
304304

305305
loadLastSavedConfiguration(context);

iterableapi/src/main/java/com/iterable/iterableapi/IterableDeeplinkManager.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ static void getAndTrackDeeplink(@Nullable String url, @NonNull IterableHelper.It
3333
*/
3434
static void getAndTrackDeeplink(@Nullable String url, @NonNull IterableHelper.IterableActionHandler callback, @NonNull String[] allowedProtocols) {
3535
if (url != null) {
36-
if (!isUrlOpenAllowed(url, allowedProtocols)) {
36+
if (!IterableUtil.isUrlOpenAllowed(url, allowedProtocols)) {
3737
IterableLogger.e(TAG, "URL was not in the allowed protocols list");
3838
return;
3939
}
@@ -63,20 +63,6 @@ static boolean isIterableDeeplink(@Nullable String url) {
6363
return false;
6464
}
6565

66-
private static boolean isUrlOpenAllowed(@NonNull String url, @NonNull String[] allowedProtocols) {
67-
if (url.startsWith("https")) {
68-
return true;
69-
}
70-
71-
for (String protocol : allowedProtocols) {
72-
if (url.startsWith(protocol)) {
73-
return true;
74-
}
75-
}
76-
77-
return false;
78-
}
79-
8066
private static class RedirectTask extends AsyncTask<String, Void, String> {
8167
static final String TAG = "RedirectTask";
8268
static final int DEFAULT_TIMEOUT_MS = 3000; //3 seconds

iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppManager.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,20 @@ public interface Listener {
4343
private final IterableInAppStorage storage;
4444
private final IterableInAppHandler handler;
4545
private final IterableInAppDisplayer displayer;
46-
private final String[] allowedProtocols;
4746
private final IterableActivityMonitor activityMonitor;
4847
private final double inAppDisplayInterval;
4948
private final List<Listener> listeners = new ArrayList<>();
5049
private long lastSyncTime = 0;
5150
private long lastInAppShown = 0;
5251
private boolean autoDisplayPaused = false;
5352

54-
IterableInAppManager(IterableApi iterableApi, IterableInAppHandler handler, double inAppDisplayInterval, String[] allowedProtocols) {
53+
IterableInAppManager(IterableApi iterableApi, IterableInAppHandler handler, double inAppDisplayInterval) {
5554
this(iterableApi,
5655
handler,
5756
inAppDisplayInterval,
5857
new IterableInAppFileStorage(iterableApi.getMainActivityContext()),
5958
IterableActivityMonitor.getInstance(),
60-
new IterableInAppDisplayer(IterableActivityMonitor.getInstance()),
61-
allowedProtocols);
59+
new IterableInAppDisplayer(IterableActivityMonitor.getInstance()));
6260
}
6361

6462
@VisibleForTesting
@@ -67,8 +65,7 @@ public interface Listener {
6765
double inAppDisplayInterval,
6866
IterableInAppStorage storage,
6967
IterableActivityMonitor activityMonitor,
70-
IterableInAppDisplayer displayer,
71-
String[] allowedProtocols) {
68+
IterableInAppDisplayer displayer) {
7269
this.api = iterableApi;
7370
this.context = iterableApi.getMainActivityContext();
7471
this.handler = handler;
@@ -77,7 +74,6 @@ public interface Listener {
7774
this.displayer = displayer;
7875
this.activityMonitor = activityMonitor;
7976
this.activityMonitor.addCallback(this);
80-
this.allowedProtocols = allowedProtocols;
8177

8278
syncInApp();
8379
}
@@ -275,17 +271,17 @@ public void handleInAppClick(@NonNull IterableInAppMessage message, @Nullable Ur
275271
if (urlString.startsWith(IterableConstants.URL_SCHEME_ACTION)) {
276272
// This is an action:// URL, pass that to the custom action handler
277273
String actionName = urlString.replace(IterableConstants.URL_SCHEME_ACTION, "");
278-
IterableActionRunner.executeAction(context, IterableAction.actionCustomAction(actionName), IterableActionSource.IN_APP, allowedProtocols);
274+
IterableActionRunner.executeAction(context, IterableAction.actionCustomAction(actionName), IterableActionSource.IN_APP, IterableApi.getInstance().config.allowedProtocols);
279275
} else if (urlString.startsWith(IterableConstants.URL_SCHEME_ITBL)) {
280276
// Handle itbl:// URLs, pass that to the custom action handler for compatibility
281277
String actionName = urlString.replace(IterableConstants.URL_SCHEME_ITBL, "");
282-
IterableActionRunner.executeAction(context, IterableAction.actionCustomAction(actionName), IterableActionSource.IN_APP, allowedProtocols);
278+
IterableActionRunner.executeAction(context, IterableAction.actionCustomAction(actionName), IterableActionSource.IN_APP, IterableApi.getInstance().config.allowedProtocols);
283279
} else if (urlString.startsWith(IterableConstants.URL_SCHEME_ITERABLE)) {
284280
// Handle iterable:// URLs - reserved for actions defined by the SDK only
285281
String actionName = urlString.replace(IterableConstants.URL_SCHEME_ITERABLE, "");
286282
handleIterableCustomAction(actionName, message);
287283
} else {
288-
IterableActionRunner.executeAction(context, IterableAction.actionOpenUrl(urlString), IterableActionSource.IN_APP, allowedProtocols);
284+
IterableActionRunner.executeAction(context, IterableAction.actionOpenUrl(urlString), IterableActionSource.IN_APP, IterableApi.getInstance().config.allowedProtocols);
289285
}
290286
}
291287
}

iterableapi/src/main/java/com/iterable/iterableapi/IterableUtil.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.pm.PackageInfo;
66
import android.content.pm.PackageManager;
77

8+
import androidx.annotation.NonNull;
89
import androidx.annotation.Nullable;
910
import androidx.annotation.VisibleForTesting;
1011

@@ -277,4 +278,18 @@ boolean writeFile(File file, String content) {
277278
return false;
278279
}
279280
}
281+
282+
static boolean isUrlOpenAllowed(@NonNull String url, @NonNull String[] allowedProtocols) {
283+
if (url.startsWith("https")) {
284+
return true;
285+
}
286+
287+
for (String protocol : allowedProtocols) {
288+
if (url.startsWith(protocol)) {
289+
return true;
290+
}
291+
}
292+
293+
return false;
294+
}
280295
}

iterableapi/src/test/java/com/iterable/iterableapi/IterableInAppManagerSyncTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class IterableInAppManagerSyncTest extends BaseTest {
3838
@Before
3939
public void setUp() throws Exception {
4040
MockitoAnnotations.initMocks(this);
41-
inAppManager = spy(new IterableInAppManager(iterableApiMock, handlerMock, 30.0, storageMock, activityMonitorMock, inAppDisplayerMock, new String[0]));
41+
inAppManager = spy(new IterableInAppManager(iterableApiMock, handlerMock, 30.0, storageMock, activityMonitorMock, inAppDisplayerMock));
4242
doAnswer(new Answer() {
4343
@Override
4444
public Object answer(InvocationOnMock invocation) throws Throwable {

iterableapi/src/test/java/com/iterable/iterableapi/IterableInAppManagerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public void testHandleActionLink() throws Exception {
264264
IterableActivityMonitor.instance = new IterableActivityMonitor();
265265

266266
IterableInAppDisplayer inAppDisplayerMock = mock(IterableInAppDisplayer.class);
267-
IterableInAppManager inAppManager = spy(new IterableInAppManager(IterableApi.sharedInstance, new IterableDefaultInAppHandler(), 30.0, new IterableInAppMemoryStorage(), IterableActivityMonitor.getInstance(), inAppDisplayerMock, new String[0]));
267+
IterableInAppManager inAppManager = spy(new IterableInAppManager(IterableApi.sharedInstance, new IterableDefaultInAppHandler(), 30.0, new IterableInAppMemoryStorage(), IterableActivityMonitor.getInstance(), inAppDisplayerMock));
268268
IterableApi.sharedInstance = new IterableApi(inAppManager);
269269
IterableTestUtils.createIterableApiNew(new IterableTestUtils.ConfigBuilderExtender() {
270270
@Override
@@ -328,7 +328,7 @@ public void testHandleCustomActionDelete() throws Exception {
328328
IterableActivityMonitor.instance = new IterableActivityMonitor();
329329

330330
IterableInAppDisplayer inAppDisplayerMock = mock(IterableInAppDisplayer.class);
331-
IterableInAppManager inAppManager = spy(new IterableInAppManager(IterableApi.sharedInstance, new IterableSkipInAppHandler(), 30.0, new IterableInAppMemoryStorage(), IterableActivityMonitor.getInstance(), inAppDisplayerMock, new String[0]));
331+
IterableInAppManager inAppManager = spy(new IterableInAppManager(IterableApi.sharedInstance, new IterableSkipInAppHandler(), 30.0, new IterableInAppMemoryStorage(), IterableActivityMonitor.getInstance(), inAppDisplayerMock));
332332
IterableApi.sharedInstance = new IterableApi(inAppManager);
333333
IterableTestUtils.createIterableApiNew(new IterableTestUtils.ConfigBuilderExtender() {
334334
@Override

iterableapi/src/test/java/com/iterable/iterableapi/IterableInboxTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public void testShowInboxMessageImmediate() throws Exception {
119119

120120
IterableInAppDisplayer inAppDisplayerMock = mock(IterableInAppDisplayer.class);
121121
when(inAppDisplayerMock.showMessage(any(IterableInAppMessage.class), eq(IterableInAppLocation.IN_APP), any(IterableHelper.IterableUrlCallback.class))).thenReturn(true);
122-
IterableInAppManager inAppManager = spy(new IterableInAppManager(IterableApi.sharedInstance, new IterableDefaultInAppHandler(), 30.0, new IterableInAppMemoryStorage(), IterableActivityMonitor.getInstance(), inAppDisplayerMock, new String[0]));
122+
IterableInAppManager inAppManager = spy(new IterableInAppManager(IterableApi.sharedInstance, new IterableDefaultInAppHandler(), 30.0, new IterableInAppMemoryStorage(), IterableActivityMonitor.getInstance(), inAppDisplayerMock));
123123
IterableApi.sharedInstance = new IterableApi(inAppManager);
124124
IterableTestUtils.createIterableApiNew(new IterableTestUtils.ConfigBuilderExtender() {
125125
@Override

0 commit comments

Comments
 (0)