Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.iterable.iterableapi.util.DeviceInfoUtils;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
Expand Down Expand Up @@ -57,10 +58,8 @@ public void onActivityStarted(Activity activity) {
@Override
public void onActivityResumed(Activity activity) {
currentActivity = new WeakReference<>(activity);
String amazonFireTvHardware = "amazon.hardware.fire_tv";
String amazonModel = Build.MODEL;

if (!inForeground || amazonModel.matches("AFTN") || activity.getPackageManager().hasSystemFeature(amazonFireTvHardware)) {
if (!inForeground || DeviceInfoUtils.isFireTV(activity.getPackageManager())) {
inForeground = true;
for (WeakReference<AppStateCallback> callback : callbacks) {
if (callback.get() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;

import com.iterable.iterableapi.util.DeviceInfoUtils;

import org.json.JSONException;
import org.json.JSONObject;

Expand Down Expand Up @@ -500,6 +502,17 @@ public static void initialize(@NonNull Context context, @NonNull String apiKey,

loadLastSavedConfiguration(context);
IterablePushNotificationUtil.processPendingAction(context);
if (DeviceInfoUtils.isFireTV(context.getPackageManager())) {
try {
JSONObject dataFields = new JSONObject();
JSONObject deviceDetails = new JSONObject();
DeviceInfoUtils.populateDeviceDetails(deviceDetails, context, sharedInstance.getDeviceId());
dataFields.put(IterableConstants.KEY_FIRETV, deviceDetails);
sharedInstance.apiClient.updateUser(dataFields, false);
} catch (JSONException e) {
IterableLogger.e(TAG, "initialize: exception", e);
}
}
}

public static void setContext(Context context) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import androidx.annotation.Nullable;
import androidx.core.app.NotificationManagerCompat;

import com.iterable.iterableapi.util.DeviceInfoUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
Expand Down Expand Up @@ -204,7 +206,7 @@ public void getInAppMessages(int count, @NonNull IterableHelper.IterableActionHa
try {
addEmailOrUserIdToJson(requestJSON);
requestJSON.put(IterableConstants.ITERABLE_IN_APP_COUNT, count);
requestJSON.put(IterableConstants.KEY_PLATFORM, IterableConstants.ITBL_PLATFORM_ANDROID);
requestJSON.put(IterableConstants.KEY_PLATFORM, DeviceInfoUtils.isFireTV(authProvider.getContext().getPackageManager()) ? IterableConstants.ITBL_PLATFORM_OTT : IterableConstants.ITBL_PLATFORM_ANDROID);
requestJSON.put(IterableConstants.ITBL_KEY_SDK_VERSION, IterableConstants.ITBL_KEY_SDK_VERSION_NUMBER);
requestJSON.put(IterableConstants.ITBL_SYSTEM_VERSION, Build.VERSION.RELEASE);
requestJSON.put(IterableConstants.KEY_PACKAGE_NAME, authProvider.getContext().getPackageName());
Expand Down Expand Up @@ -427,18 +429,7 @@ protected void registerDeviceToken(@Nullable String email, @Nullable String user

dataFields.put(IterableConstants.FIREBASE_TOKEN_TYPE, IterableConstants.MESSAGING_PLATFORM_FIREBASE);
dataFields.put(IterableConstants.FIREBASE_COMPATIBLE, true);
dataFields.put(IterableConstants.DEVICE_BRAND, Build.BRAND); //brand: google
dataFields.put(IterableConstants.DEVICE_MANUFACTURER, Build.MANUFACTURER); //manufacturer: samsung
dataFields.put(IterableConstants.DEVICE_SYSTEM_NAME, Build.DEVICE); //device name: toro
dataFields.put(IterableConstants.DEVICE_SYSTEM_VERSION, Build.VERSION.RELEASE); //version: 4.0.4
dataFields.put(IterableConstants.DEVICE_MODEL, Build.MODEL); //device model: Galaxy Nexus
dataFields.put(IterableConstants.DEVICE_SDK_VERSION, Build.VERSION.SDK_INT); //sdk version/api level: 15

dataFields.put(IterableConstants.DEVICE_ID, authProvider.getDeviceId()); // Random UUID
dataFields.put(IterableConstants.DEVICE_APP_PACKAGE_NAME, context.getPackageName());
dataFields.put(IterableConstants.DEVICE_APP_VERSION, IterableUtil.getAppVersion(context));
dataFields.put(IterableConstants.DEVICE_APP_BUILD, IterableUtil.getAppVersionCode(context));
dataFields.put(IterableConstants.DEVICE_ITERABLE_SDK_VERSION, IterableConstants.ITBL_KEY_SDK_VERSION_NUMBER);
DeviceInfoUtils.populateDeviceDetails(dataFields, context, authProvider.getDeviceId());
dataFields.put(IterableConstants.DEVICE_NOTIFICATIONS_ENABLED, NotificationManagerCompat.from(context).areNotificationsEnabled());

JSONObject device = new JSONObject();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public final class IterableConstants {
public static final String KEY_USER_TEXT = "userText";
public static final String KEY_INBOX_SESSION_ID = "inboxSessionId";
public static final String KEY_OFFLINE_MODE = "offlineMode";
public static final String KEY_FIRETV = "FireTV";

//API Endpoint Key Constants
public static final String ENDPOINT_DISABLE_DEVICE = "users/disableDevice";
Expand Down Expand Up @@ -245,6 +246,7 @@ public final class IterableConstants {

public static final String ITBL_KEY_SDK_VERSION = "SDKVersion";
public static final String ITBL_PLATFORM_ANDROID = "Android";
public static final String ITBL_PLATFORM_OTT = "OTT";
public static final String ITBL_KEY_SDK_VERSION_NUMBER = BuildConfig.ITERABLE_SDK_VERSION;
public static final String ITBL_SYSTEM_VERSION = "systemVersion";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@

import java.io.File;

class IterableUtil {
public class IterableUtil {
@VisibleForTesting
static IterableUtilImpl instance = new IterableUtilImpl();

static long currentTimeMillis() {
return instance.currentTimeMillis();
}

static String getAppVersion(Context context) {
public static String getAppVersion(Context context) {
return instance.getAppVersion(context);
}

static String getAppVersionCode(Context context) {
public static String getAppVersionCode(Context context) {
return instance.getAppVersionCode(context);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.iterable.iterableapi.util;

import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;

import com.iterable.iterableapi.IterableConstants;
import com.iterable.iterableapi.IterableUtil;

import org.json.JSONException;
import org.json.JSONObject;

public final class DeviceInfoUtils {

private DeviceInfoUtils() {
}

public static boolean isFireTV(PackageManager packageManager) {
String amazonFireTvHardware = "amazon.hardware.fire_tv";
String amazonModel = Build.MODEL;
return amazonModel.matches("AFTN") || packageManager.hasSystemFeature(amazonFireTvHardware);
}
public static void populateDeviceDetails(JSONObject dataFields, Context context, String deviceId) throws JSONException {
dataFields.put(IterableConstants.DEVICE_BRAND, Build.BRAND); //brand: google
dataFields.put(IterableConstants.DEVICE_MANUFACTURER, Build.MANUFACTURER); //manufacturer: samsung
dataFields.put(IterableConstants.DEVICE_SYSTEM_NAME, Build.DEVICE); //device name: toro
dataFields.put(IterableConstants.DEVICE_SYSTEM_VERSION, Build.VERSION.RELEASE); //version: 4.0.4
dataFields.put(IterableConstants.DEVICE_MODEL, Build.MODEL); //device model: Galaxy Nexus
dataFields.put(IterableConstants.DEVICE_SDK_VERSION, Build.VERSION.SDK_INT); //sdk version/api level: 15

dataFields.put(IterableConstants.DEVICE_ID, deviceId); // Random UUID
dataFields.put(IterableConstants.DEVICE_APP_PACKAGE_NAME, context.getPackageName());
dataFields.put(IterableConstants.DEVICE_APP_VERSION, IterableUtil.getAppVersion(context));
dataFields.put(IterableConstants.DEVICE_APP_BUILD, IterableUtil.getAppVersionCode(context));
dataFields.put(IterableConstants.DEVICE_ITERABLE_SDK_VERSION, IterableConstants.ITBL_KEY_SDK_VERSION_NUMBER);
}
}