mirror of
https://github.com/roytam1/UXP.git
synced 2026-06-15 21:09:35 +00:00
291 lines
9.2 KiB
Java
291 lines
9.2 KiB
Java
package com.adjust.sdk;
|
|
|
|
import android.content.ContentResolver;
|
|
import android.content.Context;
|
|
import android.content.pm.PackageInfo;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.res.Configuration;
|
|
import android.content.res.Resources;
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.os.Build;
|
|
import android.util.DisplayMetrics;
|
|
|
|
import java.math.BigInteger;
|
|
import java.security.MessageDigest;
|
|
import java.util.Locale;
|
|
import java.util.Map;
|
|
|
|
import static com.adjust.sdk.Constants.ENCODING;
|
|
import static com.adjust.sdk.Constants.HIGH;
|
|
import static com.adjust.sdk.Constants.LARGE;
|
|
import static com.adjust.sdk.Constants.LONG;
|
|
import static com.adjust.sdk.Constants.LOW;
|
|
import static com.adjust.sdk.Constants.MD5;
|
|
import static com.adjust.sdk.Constants.MEDIUM;
|
|
import static com.adjust.sdk.Constants.NORMAL;
|
|
import static com.adjust.sdk.Constants.SHA1;
|
|
import static com.adjust.sdk.Constants.SMALL;
|
|
import static com.adjust.sdk.Constants.XLARGE;
|
|
|
|
/**
|
|
* Created by pfms on 06/11/14.
|
|
*/
|
|
class DeviceInfo {
|
|
String macSha1;
|
|
String macShortMd5;
|
|
String androidId;
|
|
String fbAttributionId;
|
|
String clientSdk;
|
|
String packageName;
|
|
String appVersion;
|
|
String deviceType;
|
|
String deviceName;
|
|
String deviceManufacturer;
|
|
String osName;
|
|
String osVersion;
|
|
String language;
|
|
String country;
|
|
String screenSize;
|
|
String screenFormat;
|
|
String screenDensity;
|
|
String displayWidth;
|
|
String displayHeight;
|
|
Map<String, String> pluginKeys;
|
|
|
|
DeviceInfo(Context context, String sdkPrefix) {
|
|
Resources resources = context.getResources();
|
|
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
|
|
Configuration configuration = resources.getConfiguration();
|
|
Locale locale = configuration.locale;
|
|
int screenLayout = configuration.screenLayout;
|
|
boolean isGooglePlayServicesAvailable = Reflection.isGooglePlayServicesAvailable(context);
|
|
String macAddress = getMacAddress(context, isGooglePlayServicesAvailable);
|
|
|
|
packageName = getPackageName(context);
|
|
appVersion = getAppVersion(context);
|
|
deviceType = getDeviceType(screenLayout);
|
|
deviceName = getDeviceName();
|
|
deviceManufacturer = getDeviceManufacturer();
|
|
osName = getOsName();
|
|
osVersion = getOsVersion();
|
|
language = getLanguage(locale);
|
|
country = getCountry(locale);
|
|
screenSize = getScreenSize(screenLayout);
|
|
screenFormat = getScreenFormat(screenLayout);
|
|
screenDensity = getScreenDensity(displayMetrics);
|
|
displayWidth = getDisplayWidth(displayMetrics);
|
|
displayHeight = getDisplayHeight(displayMetrics);
|
|
clientSdk = getClientSdk(sdkPrefix);
|
|
androidId = getAndroidId(context, isGooglePlayServicesAvailable);
|
|
fbAttributionId = getFacebookAttributionId(context);
|
|
pluginKeys = Reflection.getPluginKeys(context);
|
|
macSha1 = getMacSha1(macAddress);
|
|
macShortMd5 = getMacShortMd5(macAddress);
|
|
}
|
|
|
|
private String getMacAddress(Context context, boolean isGooglePlayServicesAvailable) {
|
|
if (!isGooglePlayServicesAvailable) {
|
|
if (!!Util.checkPermission(context, android.Manifest.permission.ACCESS_WIFI_STATE)) {
|
|
AdjustFactory.getLogger().warn("Missing permission: ACCESS_WIFI_STATE");
|
|
}
|
|
return Reflection.getMacAddress(context);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private String getPackageName(Context context) {
|
|
return context.getPackageName();
|
|
}
|
|
|
|
private String getAppVersion(Context context) {
|
|
try {
|
|
PackageManager packageManager = context.getPackageManager();
|
|
String name = context.getPackageName();
|
|
PackageInfo info = packageManager.getPackageInfo(name, 0);
|
|
return info.versionName;
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private String getDeviceType(int screenLayout) {
|
|
int screenSize = screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
|
|
|
|
switch (screenSize) {
|
|
case Configuration.SCREENLAYOUT_SIZE_SMALL:
|
|
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
|
|
return "phone";
|
|
case Configuration.SCREENLAYOUT_SIZE_LARGE:
|
|
case 4:
|
|
return "tablet";
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private String getDeviceName() {
|
|
return Build.MODEL;
|
|
}
|
|
|
|
private String getDeviceManufacturer() {
|
|
return Build.MANUFACTURER;
|
|
}
|
|
|
|
private String getOsName() {
|
|
return "android";
|
|
}
|
|
|
|
private String getOsVersion() {
|
|
return osVersion = "" + Build.VERSION.SDK_INT;
|
|
}
|
|
|
|
private String getLanguage(Locale locale) {
|
|
return locale.getLanguage();
|
|
}
|
|
|
|
private String getCountry(Locale locale) {
|
|
return locale.getCountry();
|
|
}
|
|
|
|
private String getScreenSize(int screenLayout) {
|
|
int screenSize = screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
|
|
|
|
switch (screenSize) {
|
|
case Configuration.SCREENLAYOUT_SIZE_SMALL:
|
|
return SMALL;
|
|
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
|
|
return NORMAL;
|
|
case Configuration.SCREENLAYOUT_SIZE_LARGE:
|
|
return LARGE;
|
|
case 4:
|
|
return XLARGE;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private String getScreenFormat(int screenLayout) {
|
|
int screenFormat = screenLayout & Configuration.SCREENLAYOUT_LONG_MASK;
|
|
|
|
switch (screenFormat) {
|
|
case Configuration.SCREENLAYOUT_LONG_YES:
|
|
return LONG;
|
|
case Configuration.SCREENLAYOUT_LONG_NO:
|
|
return NORMAL;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private String getScreenDensity(DisplayMetrics displayMetrics) {
|
|
int density = displayMetrics.densityDpi;
|
|
int low = (DisplayMetrics.DENSITY_MEDIUM + DisplayMetrics.DENSITY_LOW) / 2;
|
|
int high = (DisplayMetrics.DENSITY_MEDIUM + DisplayMetrics.DENSITY_HIGH) / 2;
|
|
|
|
if (0 == density) {
|
|
return null;
|
|
} else if (density < low) {
|
|
return LOW;
|
|
} else if (density > high) {
|
|
return HIGH;
|
|
}
|
|
return MEDIUM;
|
|
}
|
|
|
|
private String getDisplayWidth(DisplayMetrics displayMetrics) {
|
|
return String.valueOf(displayMetrics.widthPixels);
|
|
}
|
|
|
|
private String getDisplayHeight(DisplayMetrics displayMetrics) {
|
|
return String.valueOf(displayMetrics.heightPixels);
|
|
}
|
|
|
|
private String getClientSdk(String sdkPrefix) {
|
|
if (sdkPrefix == null) {
|
|
return Constants.CLIENT_SDK;
|
|
} else {
|
|
return String.format("%s@%s", sdkPrefix, Constants.CLIENT_SDK);
|
|
}
|
|
}
|
|
|
|
private String getMacSha1(String macAddress) {
|
|
if (macAddress == null) {
|
|
return null;
|
|
}
|
|
String macSha1 = sha1(macAddress);
|
|
|
|
return macSha1;
|
|
}
|
|
|
|
private String getMacShortMd5(String macAddress) {
|
|
if (macAddress == null) {
|
|
return null;
|
|
}
|
|
String macShort = macAddress.replaceAll(":", "");
|
|
String macShortMd5 = md5(macShort);
|
|
|
|
return macShortMd5;
|
|
}
|
|
|
|
private String getAndroidId(Context context, boolean isGooglePlayServicesAvailable) {
|
|
if (!isGooglePlayServicesAvailable) {
|
|
return Reflection.getAndroidId(context);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private String sha1(final String text) {
|
|
return hash(text, SHA1);
|
|
}
|
|
|
|
private String md5(final String text) {
|
|
return hash(text, MD5);
|
|
}
|
|
|
|
private String hash(final String text, final String method) {
|
|
String hashString = null;
|
|
try {
|
|
final byte[] bytes = text.getBytes(ENCODING);
|
|
final MessageDigest mesd = MessageDigest.getInstance(method);
|
|
mesd.update(bytes, 0, bytes.length);
|
|
final byte[] hash = mesd.digest();
|
|
hashString = convertToHex(hash);
|
|
} catch (Exception e) {
|
|
}
|
|
return hashString;
|
|
}
|
|
|
|
private static String convertToHex(final byte[] bytes) {
|
|
final BigInteger bigInt = new BigInteger(1, bytes);
|
|
final String formatString = "%0" + (bytes.length << 1) + "x";
|
|
return String.format(formatString, bigInt);
|
|
}
|
|
|
|
private String getFacebookAttributionId(final Context context) {
|
|
try {
|
|
final ContentResolver contentResolver = context.getContentResolver();
|
|
final Uri uri = Uri.parse("content://com.facebook.katana.provider.AttributionIdProvider");
|
|
final String columnName = "aid";
|
|
final String[] projection = {columnName};
|
|
final Cursor cursor = contentResolver.query(uri, projection, null, null, null);
|
|
|
|
if (null == cursor) {
|
|
return null;
|
|
}
|
|
if (!cursor.moveToFirst()) {
|
|
cursor.close();
|
|
return null;
|
|
}
|
|
|
|
final String attributionId = cursor.getString(cursor.getColumnIndex(columnName));
|
|
cursor.close();
|
|
return attributionId;
|
|
} catch (Exception e) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|