init commit

This commit is contained in:
2023-10-16 16:40:14 +03:00
commit 4dad863370
596 changed files with 52907 additions and 0 deletions
@@ -0,0 +1,583 @@
/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* android.accounts.Account
* android.accounts.AccountManager
* android.app.Activity
* android.content.Context
* android.content.pm.PackageManager$NameNotFoundException
* android.net.wifi.WifiManager
* android.os.Build
* android.os.Build$VERSION
* android.telephony.TelephonyManager
* android.util.Log
* android.util.Patterns
*/
package com.ea.nimble;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.util.Patterns;
import com.ea.nimble.Log.Helper;
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ApplicationEnvironmentImpl
extends Component
implements IApplicationEnvironment,
LogSource {
private static final int MILLIS_IN_AN_HOUR = 3600000;
private static final String NIMBLE_APPLICATIONENVIRONMENT_PERSISTENCE_GAME_SPECIFIED_ID = "nimble_applicationenvironment_game_specified_id";
private static final String PERSISTENCE_AGE_REQUIREMENTS = "ageRequirement";
private static final String PERSISTENCE_LANGUAGE = "language";
private static final String PERSISTENCE_TIME_RETRIEVED = "timeRetrieved";
private static final String SYNERGY_API_GET_AGE_REQUIREMENTS = "/rest/agerequirements/ip";
private static boolean isMainApplicationRunning = false;
private static Activity s_currentActivity = null;
private Context m_context;
private BaseCore m_core;
private String m_gameSpecifiedPlayerId;
private boolean m_googleAdvertiserInfoLoaded;
private String m_googleAdvertisingId;
private boolean m_googleLimitAdTrackingEnabled;
private String m_language;
private String m_packageId;
private String m_version;
ApplicationEnvironmentImpl(BaseCore fileArray) {
int n2 = 0;
this.m_googleAdvertisingId = "";
this.m_googleLimitAdTrackingEnabled = true;
this.m_googleAdvertiserInfoLoaded = false;
if (s_currentActivity == null) {
throw new AssertionError("Cannot create a ApplicationEnvironment without a valid current activity");
}
this.m_core = fileArray;
this.m_context = s_currentActivity.getApplicationContext();
this.m_language = null;
File documentPath = new File(this.getDocumentPath());
File tempPath = new File(this.getTempPath());
if (!documentPath.exists()) {
if (!documentPath.mkdirs()) throw new AssertionError("APP_ENV: Cannot create necessary folder");
}
Log.i("lol", tempPath.getAbsolutePath());
if (!tempPath.exists() && !tempPath.mkdirs()) {
throw new AssertionError("APP_ENV: Cannot create necessary folder");
}
File[] files = tempPath.listFiles();
int n3 = files.length;
while (n2 < n3) {
tempPath = files[n2];
tempPath.delete();
Log.d("Nimble", "APP_ENV: Delete temp file " + tempPath.getName());
++n2;
}
}
static /* synthetic */ String access$002(ApplicationEnvironmentImpl applicationEnvironmentImpl, String string2) {
applicationEnvironmentImpl.m_googleAdvertisingId = string2;
return string2;
}
static /* synthetic */ boolean access$102(ApplicationEnvironmentImpl applicationEnvironmentImpl, boolean bl2) {
applicationEnvironmentImpl.m_googleLimitAdTrackingEnabled = bl2;
return bl2;
}
static /* synthetic */ boolean access$202(ApplicationEnvironmentImpl applicationEnvironmentImpl, boolean bl2) {
applicationEnvironmentImpl.m_googleAdvertiserInfoLoaded = bl2;
return bl2;
}
private static boolean commandExists(String string2) {
String path = System.getenv("PATH");
if (path == null) {
return false;
}
String[] split = path.split(Pattern.quote(File.pathSeparator));
int n2 = split.length;
int n3 = 0;
while (n3 < n2) {
if (new File(split[n3], string2).exists()) {
return true;
}
++n3;
}
return false;
}
public static Activity getCurrentActivity() {
return s_currentActivity;
}
private String getDeviceLanguage() {
return Locale.getDefault().toString();
}
public static boolean isMainApplicationRunning() {
return isMainApplicationRunning;
}
/*
* Enabled unnecessary exception pruning
*/
private void retrieveGoogleAdvertiserId() {
synchronized (this) {
this.m_googleAdvertiserInfoLoaded = false;
Thread thread = new Thread(new Runnable(){
/*
* Enabled unnecessary exception pruning
*/
@Override
public void run() {
block12: {
Helper.LOGV(this, "APP_ENV: Running thread to get Google Advertising ID");
if (ApplicationEnvironment.getCurrentActivity() != null) {
AdvertisingIdClient.Info info2 = null;
try {
if (ApplicationEnvironment.isMainApplicationRunning()) {
info2 = null;
info2 = AdvertisingIdClient.getAdvertisingIdInfo(ApplicationEnvironment.getCurrentActivity());
}
if (info2 != null) {
Helper.LOGD(this, "APP_ENV: Setting values for Google Advertising ID and isLimitAdTrackingEnabled flag");
ApplicationEnvironmentImpl.access$002(ApplicationEnvironmentImpl.this, info2.getId());
ApplicationEnvironmentImpl.access$102(ApplicationEnvironmentImpl.this, info2.isLimitAdTrackingEnabled());
break block12;
}
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID - AdvertisingIdInfo is null");
}
catch (IOException iOException) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID - Unrecoverable error connecting to Google Play Services");
}
catch (GooglePlayServicesRepairableException googlePlayServicesRepairableException) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID - Recoverable error connecting to Google Play Services");
}
catch (GooglePlayServicesNotAvailableException googlePlayServicesNotAvailableException) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID - Google Play Services not available on this device");
}
catch (IllegalStateException illegalStateException) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID - Illegal State Exception " + illegalStateException.getMessage());
}
catch (Exception exception) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID - General Exception " + exception.getMessage());
}
} else {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID because there is no current activity");
}
}
ApplicationEnvironmentImpl.access$202(ApplicationEnvironmentImpl.this, true);
}
});
try {
thread.start();
}
catch (VerifyError verifyError) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID because this device is not supported");
this.m_googleAdvertiserInfoLoaded = true;
}
catch (Throwable throwable) {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID because this device is not supported");
this.m_googleAdvertiserInfoLoaded = true;
}
return;
}
}
private void setApplicationLanguageCode(String object, boolean bl2) {
if ((object = this.validatedLanguageCode((String)object, bl2)) == null) {
return;
}
if (this.m_language != null && this.m_language.equals(object)) {
if (bl2) {
Helper.LOGD(this, "Setting the same language %s, skipping assignment", this.m_language);
return;
}
} else {
this.m_language = object;
Helper.LOGI(this, "Successfully set language to %s.", this.m_language);
Utility.sendBroadcast("nimble.notification.LanguageChanged", null);
}
if (bl2) return;
Persistence persistenceForNimbleComponent = PersistenceService.getPersistenceForNimbleComponent("com.ea.nimble.applicationEnvironment", Persistence.Storage.DOCUMENT);
if (persistenceForNimbleComponent != null) {
Helper.LOGD(this, "Saving language data to persistence.");
persistenceForNimbleComponent.setValue(PERSISTENCE_LANGUAGE, (Serializable)((Object)this.m_language));
return;
}
Helper.LOGE(this, "Could not get application environment persistence object to save to.");
}
public static void setCurrentActivity(Activity activity) {
isMainApplicationRunning = true;
s_currentActivity = activity;
}
private String validatedLanguageCode(String string2, boolean bl2) {
if (!Utility.validString(string2)) {
Helper.LOGI(this, "AppEnv: Language parameter is null or empty; keeping language at previous value.");
return null;
}
string2 = string2.replace('_', '-');
Object object = Pattern.compile("^([a-z]{2,3})?(-([A-Z][a-z]{3}))?(-([A-Z]{2}))?(-.*)*$").matcher(string2);
if (!((Matcher)object).find()) {
Helper.LOGE(this, "Malformed language code " + string2 + " cannot be validated; backend system will likely treat it as en-US.");
return string2;
}
String string3 = ((Matcher)object).group(1);
if (Utility.validString(string3) && !Arrays.asList(Locale.getISOLanguages()).contains(string3)) {
Helper.LOGE(this, "Unknown language code " + string3 + " in language code " + string2 + "; backend system will likely treat it as en-US.");
}
if (!Utility.validString((String)(object = ((Matcher)object).group(5)))) return string2;
if (Arrays.asList(Locale.getISOCountries()).contains(object)) return string2;
Helper.LOGE(this, "Unknown region code " + (String)object + " in language code " + string2 + "; backend system will likely treat it as en-US.");
return string2;
}
@Override
public int getAgeCompliance() {
Persistence persistence = PersistenceService.getPersistenceForNimbleComponent("com.ea.nimble.applicationEnvironment", Persistence.Storage.CACHE);
Serializable serializable = persistence.getValue(PERSISTENCE_TIME_RETRIEVED);
if (serializable != null) {
if ((int)(new Date().getTime() - (Long)serializable) / 3600000 <= 24) return (Integer)persistence.getValue(PERSISTENCE_AGE_REQUIREMENTS);
Helper.LOGI(this, "getAgeCompliance- Stored value is older than 24 hours. Call refreshAgeCompliance to retrieve minAgeCompliance", new Object[]{null});
return -1;
}
Helper.LOGI(this, "getAgeCompliance- No stored value in persistance. Call refreshAgeCompliance to retrieve minAgeCompliance.", new Object[]{null});
return -1;
}
@Override
public String getApplicationBundleId() {
if (this.m_packageId != null) return this.m_packageId;
Context context = this.getApplicationContext();
if (context == null) return this.m_packageId;
this.m_packageId = context.getPackageName();
return this.m_packageId;
}
@Override
public Context getApplicationContext() {
return this.m_context;
}
@Override
public String getApplicationLanguageCode() {
return this.m_language;
}
@Override
public String getApplicationName() {
Context context = this.getApplicationContext();
if (context != null) return context.getPackageManager().getApplicationLabel(context.getApplicationInfo()).toString();
return null;
}
@Override
public String getApplicationVersion() {
if (this.m_version != null) return this.m_version;
Context context = this.getApplicationContext();
if (context == null) {
return null;
}
try {
this.m_version = context.getPackageManager().getPackageInfo((String)context.getPackageName(), (int)0).versionName;
return this.m_version;
}
catch (PackageManager.NameNotFoundException nameNotFoundException) {
Helper.LOGE(this, "Package name %s not found", context.getPackageName());
return null;
}
}
@Override
public String getCachePath() {
return "/data/data/" + m_context.getPackageName() + File.separator + "cache" + File.separator + "Nimble" + File.separator + this.m_core.getConfiguration().toString();
}
@Override
public String getCarrier() {
Context context = this.getApplicationContext();
if (context != null) return ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkOperator();
return null;
}
@Override
public String getComponentId() {
return "com.ea.nimble.applicationEnvironment";
}
@Override
public String getDeviceBrand() {
return Build.BRAND;
}
@Override
public String getDeviceCodename() {
return Build.DEVICE;
}
@Override
public String getDeviceFingerprint() {
return Build.FINGERPRINT;
}
@Override
public String getDeviceManufacturer() {
return Build.MANUFACTURER;
}
@Override
public String getDeviceModel() {
return Build.MODEL;
}
@Override
public String getDeviceString() {
return Build.MANUFACTURER + Build.MODEL;
}
@Override
public String getDocumentPath() {
Context object = this.getApplicationContext();
if (object == null) {
String s = System.getProperty("user.dir") + File.separator + "doc";
return s + File.separator + "Nimble" + File.separator + this.m_core.getConfiguration().toString();
}
String path = object.getFilesDir().getPath();
return path + File.separator + "Nimble" + File.separator + this.m_core.getConfiguration().toString();
}
@Override
public String getGameSpecifiedPlayerId() {
return this.m_gameSpecifiedPlayerId;
}
@Override
public String getGoogleAdvertisingId() {
long l2 = System.currentTimeMillis();
while (!this.m_googleAdvertiserInfoLoaded) {
if (System.currentTimeMillis() - l2 > 5000L) {
this.m_googleAdvertiserInfoLoaded = true;
continue;
}
try {
Thread.sleep(1L);
}
catch (InterruptedException interruptedException) {
Helper.LOGI(this, "Blocking call to getGoogleAdvertisingId was interrupted prematurely.");
}
}
return this.m_googleAdvertisingId;
}
@Override
public String getGoogleEmail() {
int n2 = 0;
AccountManager accountArray = AccountManager.get(this.getApplicationContext());
Account[] accountsByType = accountArray.getAccountsByType("com.google");
if (accountsByType.length > 0) {
return accountsByType[0].name;
}
Pattern emailAddress = Patterns.EMAIL_ADDRESS;
Account[] accounts = accountArray.getAccounts();
int n3 = accounts.length;
while (n2 < n3) {
Account account = accounts[n2];
if (emailAddress.matcher(account.name).matches()) {
return account.name;
}
++n2;
}
return null;
}
@Override
public boolean getIadAttribution() {
return false;
}
@Override
public String getLogSourceTitle() {
return "AppEnv";
}
@Override
public String getMACAddress() {
Context context = this.getApplicationContext();
if (context == null) {
return null;
}
WifiInfo wifi = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo();
if ( null != wifi ) return wifi.getMacAddress();
return null;
}
@Override
public String getOsVersion() {
return String.valueOf(Build.VERSION.SDK_INT);
}
@Override
public String getShortApplicationLanguageCode() {
if (this.m_language == null) return this.m_language;
int n2 = this.m_language.indexOf(45);
if (n2 == -1) return this.m_language;
return this.m_language.substring(0, n2);
}
@Override
public String getTempPath() {
return this.getCachePath() + File.separator + "temp";
}
@Override
public boolean isAppCracked() {
Helper.LOGDS("FraudDetection", "Returning false for isAppCracked() since it hasn't been implemented yet");
return false;
}
@Override
public boolean isDeviceRooted() {
String string2 = Build.TAGS;
if (string2 != null && string2.contains("test-keys")) {
return true;
}
if (new File("/system/app/Superuser.apk").exists()) return true;
if (ApplicationEnvironmentImpl.commandExists("su")) return true;
return false;
}
@Override
public boolean isLimitAdTrackingEnabled() {
return this.m_googleLimitAdTrackingEnabled;
}
@Override
public void refreshAgeCompliance() {
if (Network.getComponent().getStatus() != Network.Status.OK) {
Error error = new Error(Error.Code.NETWORK_NO_CONNECTION, "No network connection, Min Age cannot update.");
HashMap<String, Serializable> hashMap = new HashMap<String, Serializable>();
hashMap.put("result", (Serializable)((Object)"0"));
hashMap.put("error", error);
Utility.sendBroadcastSerializable("nimble.notification.age_compliance_refreshed", hashMap);
return;
}
Object object = (SynergyRequest.SynergyRequestPreparingCallback) synergyRequest -> {
synergyRequest.baseUrl = SynergyEnvironment.getComponent().getServerUrlWithKey("geoip.url");
synergyRequest.send();
};
SynergyNetworkConnectionCallback synergyNetworkConnectionCallback = new SynergyNetworkConnectionCallback(){
@Override
public void callback(SynergyNetworkConnectionHandle object) {
HashMap<String, Serializable> hashMap = new HashMap<>();
if (object.getResponse().getError() == null) {
Integer n2 = (Integer)object.getResponse().getJsonData().get("code");
} else {
Helper.LOGD(this, "LOG_CALLBACK_ERROR : %s", object.getResponse().getError().getMessage());
hashMap.put("result", (Serializable)((Object)"0"));
hashMap.put("error", object.getResponse().getError());
}
Utility.sendBroadcastSerializable("nimble.notification.age_compliance_refreshed", hashMap);
}
};
object = new SynergyRequest(SYNERGY_API_GET_AGE_REQUIREMENTS, IHttpRequest.Method.GET, (SynergyRequest.SynergyRequestPreparingCallback)object);
SynergyNetwork.getComponent().sendRequest((SynergyRequest)object, synergyNetworkConnectionCallback);
}
@Override
protected void restore() {
Object object = PersistenceService.getPersistenceForNimbleComponent("com.ea.nimble.applicationEnvironment", Persistence.Storage.DOCUMENT);
if (object == null) {
this.setApplicationLanguageCode(this.getDeviceLanguage(), true);
Helper.LOGWS("ApplicationEnvironment", "Persistence is null - Couldn't read Game Specified Player ID or Language from Persistence");
return;
}
if (!Utility.validString(this.m_gameSpecifiedPlayerId)) {
Helper.LOGDS("ApplicationEnvironment", "Current game specified player ID is empty, reload from persistence");
this.m_gameSpecifiedPlayerId = ((Persistence)object).getStringValue(NIMBLE_APPLICATIONENVIRONMENT_PERSISTENCE_GAME_SPECIFIED_ID);
}
if (Utility.validString((String)(object = ((Persistence)object).getStringValue(PERSISTENCE_LANGUAGE)))) {
Helper.LOGD(this, "Restored language %s from persistence.", this.m_language);
return;
}
Helper.LOGD(this, "Unable to restore language from persistence. Setting language to device language.");
this.setApplicationLanguageCode(this.getDeviceLanguage(), true);
}
@Override
protected void resume() {
try {
this.retrieveGoogleAdvertiserId();
return;
}
catch (VerifyError verifyError) {}
finally {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID because this device is not supported");
return;
}
}
@Override
public void setApplicationBundleId(String string2) {
this.m_packageId = string2;
}
@Override
public void setApplicationLanguageCode(String string2) {
this.setApplicationLanguageCode(string2, false);
}
@Override
public void setGameSpecifiedPlayerId(String object) {
this.m_gameSpecifiedPlayerId = object;
Persistence persistenceForNimbleComponent = PersistenceService.getPersistenceForNimbleComponent("com.ea.nimble.applicationEnvironment", Persistence.Storage.DOCUMENT);
if (object == null) {
Helper.LOGWS("ApplicationEnvironment", "Persistence is null - Couldn't save Game Specified Player ID to Persistence");
return;
}
persistenceForNimbleComponent.setValue(NIMBLE_APPLICATIONENVIRONMENT_PERSISTENCE_GAME_SPECIFIED_ID, (Serializable)((Object)this.m_gameSpecifiedPlayerId));
}
@Override
protected void setup() {
this.m_context = s_currentActivity.getApplicationContext();
try {
this.retrieveGoogleAdvertiserId();
}
catch (VerifyError verifyError) {}
finally {
Helper.LOGW(this, "APP_ENV: Cannot get Google Advertising ID because this device is not supported");
}
}
@Override
protected void teardown() {
this.m_context = null;
}
}