Add decompiled reference source files
- Key Java files showing custom server implementation - Original AndroidManifest.xml for reference - SynergyEnvironmentImpl.java - Custom server configuration - HttpRequest.java - HTTP implementation details - Documentation explaining each file's purpose Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
131
decompiled-reference/README.md
Normal file
131
decompiled-reference/README.md
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
# Decompiled Reference Files
|
||||||
|
|
||||||
|
This directory contains **reference files** decompiled from Real Racing 3 APK using JADX. These files are included for:
|
||||||
|
|
||||||
|
- 📚 **Educational purposes** - Understanding how the game communicates with servers
|
||||||
|
- 🔍 **Reference documentation** - See how custom server support is implemented
|
||||||
|
- 🛠️ **Modification guidance** - Know exactly what files to modify
|
||||||
|
|
||||||
|
## ⚠️ Important Legal Notice
|
||||||
|
|
||||||
|
These files are **decompiled from the original Real Racing 3 APK** and are:
|
||||||
|
- © Electronic Arts Inc. - All rights reserved
|
||||||
|
- Included for **educational and preservation purposes only**
|
||||||
|
- **NOT** to be used for commercial purposes
|
||||||
|
- **NOT** to be redistributed outside this private repository
|
||||||
|
|
||||||
|
## 📁 Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
decompiled-reference/
|
||||||
|
├── com/
|
||||||
|
│ ├── ea/
|
||||||
|
│ │ └── nimble/
|
||||||
|
│ │ ├── SynergyEnvironmentImpl.java - Custom server configuration
|
||||||
|
│ │ └── SynergyRequest.java - HTTP request handling
|
||||||
|
│ └── firemonkeys/
|
||||||
|
│ └── cloudcellapi/
|
||||||
|
│ └── HttpRequest.java - Low-level HTTP implementation
|
||||||
|
└── resources/
|
||||||
|
└── AndroidManifest.xml - App manifest (original)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔑 Key Files Explained
|
||||||
|
|
||||||
|
### SynergyEnvironmentImpl.java
|
||||||
|
**Location**: Lines 166-183 contain the custom server implementation
|
||||||
|
|
||||||
|
This file contains the `NimbleConfiguration` enum and shows how RR3 reads the custom server URL:
|
||||||
|
|
||||||
|
```java
|
||||||
|
public String getSynergyDirectorServerUrl() {
|
||||||
|
switch (this.m_configuration) {
|
||||||
|
case CUSTOMIZED:
|
||||||
|
// 🎯 This is what we're using!
|
||||||
|
return ComponentManager.getComponent(ApplicationEnvironment.class)
|
||||||
|
.getApplicationInfo()
|
||||||
|
.metaData
|
||||||
|
.getString("NimbleCustomizedSynergyServerEndpointUrl");
|
||||||
|
case LIVE:
|
||||||
|
return "https://api.firemonkeys.ea.com/";
|
||||||
|
// ... other cases
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### HttpRequest.java
|
||||||
|
Shows how the game makes HTTP requests, including:
|
||||||
|
- JNI callbacks for response streaming
|
||||||
|
- Custom SSL certificate validation
|
||||||
|
- Header management (EAM-SESSION, EAM-USER-ID, etc.)
|
||||||
|
|
||||||
|
### AndroidManifest.xml
|
||||||
|
Original manifest showing:
|
||||||
|
- Current configuration: `com.ea.nimble.configuration = "live"`
|
||||||
|
- Package name: `com.ea.game.realracing3_row`
|
||||||
|
- Permissions and activities
|
||||||
|
- **This is the file we modify** to point to community servers
|
||||||
|
|
||||||
|
## 🎓 How to Use These Files
|
||||||
|
|
||||||
|
### For Understanding
|
||||||
|
Read these files to understand:
|
||||||
|
1. How RR3 determines which server to connect to
|
||||||
|
2. What headers are required for API calls
|
||||||
|
3. How authentication and sessions work
|
||||||
|
4. SSL/certificate validation implementation
|
||||||
|
|
||||||
|
### For Modification Reference
|
||||||
|
When modifying APKs:
|
||||||
|
1. Check `SynergyEnvironmentImpl.java` to see expected metadata keys
|
||||||
|
2. Review `AndroidManifest.xml` to see original configuration
|
||||||
|
3. Reference `HttpRequest.java` to understand HTTP implementation
|
||||||
|
|
||||||
|
### For Server Development
|
||||||
|
Use these files to:
|
||||||
|
- Understand expected API behavior
|
||||||
|
- See what headers the client sends
|
||||||
|
- Know how SSL is validated
|
||||||
|
- Implement compatible server responses
|
||||||
|
|
||||||
|
## 🔍 Decompilation Details
|
||||||
|
|
||||||
|
**Tool Used**: JADX (Java Decompiler)
|
||||||
|
- Version: JADX 1.4.7+
|
||||||
|
- Command: `jadx realracing3.apk -d decompiled/`
|
||||||
|
- Source: Real Racing 3 v14.0.1
|
||||||
|
|
||||||
|
**Quality**: These files are decompiled from Dalvik bytecode:
|
||||||
|
- ✅ Structure is accurate
|
||||||
|
- ✅ Logic flow is correct
|
||||||
|
- ⚠️ Variable names may be obfuscated
|
||||||
|
- ⚠️ Some comments are from decompiler
|
||||||
|
|
||||||
|
## 📖 Related Documentation
|
||||||
|
|
||||||
|
For complete analysis of the protocol, see:
|
||||||
|
- [NETWORK_COMMUNICATION_ANALYSIS.md](../NETWORK_COMMUNICATION_ANALYSIS.md)
|
||||||
|
|
||||||
|
For modification instructions, see:
|
||||||
|
- [APK_MODIFICATION_GUIDE.md](../APK_MODIFICATION_GUIDE.md)
|
||||||
|
|
||||||
|
## 🚫 What's NOT Included
|
||||||
|
|
||||||
|
We do **NOT** include:
|
||||||
|
- ❌ Full game source code (too large, unnecessary)
|
||||||
|
- ❌ Game assets (textures, models, sounds)
|
||||||
|
- ❌ Native libraries (.so files)
|
||||||
|
- ❌ Compiled APK files
|
||||||
|
- ❌ Obfuscated/minified classes
|
||||||
|
|
||||||
|
Only the **essential files** needed to understand custom server support are included.
|
||||||
|
|
||||||
|
## 📝 Attribution
|
||||||
|
|
||||||
|
**Original Software**: Real Racing 3
|
||||||
|
**Developer**: Firemonkeys Studios / Electronic Arts
|
||||||
|
**Decompilation**: For educational research and game preservation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*These files are provided for educational purposes under fair use for interoperability and preservation research.*
|
||||||
490
decompiled-reference/com/ea/nimble/SynergyEnvironmentImpl.java
Normal file
490
decompiled-reference/com/ea/nimble/SynergyEnvironmentImpl.java
Normal file
@@ -0,0 +1,490 @@
|
|||||||
|
package com.ea.nimble;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import com.ea.nimble.Error;
|
||||||
|
import com.ea.nimble.Log;
|
||||||
|
import com.ea.nimble.Network;
|
||||||
|
import com.ea.nimble.Persistence;
|
||||||
|
import com.ea.nimble.SynergyEnvironmentUpdater;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
/* loaded from: classes2.dex */
|
||||||
|
public class SynergyEnvironmentImpl extends Component implements ISynergyEnvironment, LogSource {
|
||||||
|
private static final String PERSISTENCE_DATA_ID = "environmentData";
|
||||||
|
public static final int SYNERGY_APP_VERSION_OK = 0;
|
||||||
|
public static final int SYNERGY_APP_VERSION_UPDATE_RECOMMENDED = 1;
|
||||||
|
public static final int SYNERGY_APP_VERSION_UPDATE_REQUIRED = 2;
|
||||||
|
private static final String SYNERGY_INT_SERVER_URL = "https://director-int.sn.eamobile.com";
|
||||||
|
private static final String SYNERGY_LIVE_SERVER_URL = "https://syn-dir.sn.eamobile.com";
|
||||||
|
private static final String SYNERGY_STAGE_SERVER_URL = "https://director-stage.sn.eamobile.com";
|
||||||
|
public static final double SYNERGY_UPDATE_RATE_LIMIT_PERIOD_IN_SECONDS = 60.0d;
|
||||||
|
public static final double SYNERGY_UPDATE_REFRESH_PERIOD_IN_SECONDS = 300.0d;
|
||||||
|
private BaseCore m_core;
|
||||||
|
private EnvironmentDataContainer m_environmentDataContainer;
|
||||||
|
private EnvironmentDataContainer m_previousValidEnvironmentDataContainer;
|
||||||
|
private Long m_synergyEnvironmentUpdateRateLimitTriggerTimestamp;
|
||||||
|
private SynergyEnvironmentUpdater m_synergyStartupObject;
|
||||||
|
private BroadcastReceiver m_networkStatusChangeReceiver = null;
|
||||||
|
private boolean m_dataLoadedOnComponentSetup = false;
|
||||||
|
private boolean m_pendingStartupFinishedNotification = false;
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public String getComponentId() {
|
||||||
|
return SynergyEnvironment.COMPONENT_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.LogSource
|
||||||
|
public String getLogSourceTitle() {
|
||||||
|
return "SynergyEnv";
|
||||||
|
}
|
||||||
|
|
||||||
|
public SynergyEnvironmentImpl(BaseCore baseCore) {
|
||||||
|
this.m_core = baseCore;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getEADeviceId() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getEADeviceId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getSynergyId() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getSynergyId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getSellId() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getSellId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getProductId() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getProductId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getEAHardwareId() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getEAHardwareId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public Error setServerUrl(String str, String str2) {
|
||||||
|
return this.m_environmentDataContainer.setServerUrl(str, str2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getServerUrlWithKey(String str) {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getServerUrlWithKey(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public int getLatestAppVersionCheckResult() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getLatestAppVersionCheckResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public int getTrackingPostInterval() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getTrackingPostInterval();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* renamed from: com.ea.nimble.SynergyEnvironmentImpl$3, reason: invalid class name */
|
||||||
|
public static /* synthetic */ class AnonymousClass3 {
|
||||||
|
static final /* synthetic */ int[] $SwitchMap$com$ea$nimble$NimbleConfiguration;
|
||||||
|
|
||||||
|
static {
|
||||||
|
int[] iArr = new int[NimbleConfiguration.values().length];
|
||||||
|
$SwitchMap$com$ea$nimble$NimbleConfiguration = iArr;
|
||||||
|
try {
|
||||||
|
iArr[NimbleConfiguration.INTEGRATION.ordinal()] = 1;
|
||||||
|
} catch (NoSuchFieldError unused) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$SwitchMap$com$ea$nimble$NimbleConfiguration[NimbleConfiguration.STAGE.ordinal()] = 2;
|
||||||
|
} catch (NoSuchFieldError unused2) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$SwitchMap$com$ea$nimble$NimbleConfiguration[NimbleConfiguration.LIVE.ordinal()] = 3;
|
||||||
|
} catch (NoSuchFieldError unused3) {
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$SwitchMap$com$ea$nimble$NimbleConfiguration[NimbleConfiguration.CUSTOMIZED.ordinal()] = 4;
|
||||||
|
} catch (NoSuchFieldError unused4) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getSynergyDirectorServerUrl(NimbleConfiguration nimbleConfiguration) {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
int i = AnonymousClass3.$SwitchMap$com$ea$nimble$NimbleConfiguration[nimbleConfiguration.ordinal()];
|
||||||
|
if (i == 1) {
|
||||||
|
return SYNERGY_INT_SERVER_URL;
|
||||||
|
}
|
||||||
|
if (i == 2) {
|
||||||
|
return SYNERGY_STAGE_SERVER_URL;
|
||||||
|
}
|
||||||
|
if (i == 3) {
|
||||||
|
return SYNERGY_LIVE_SERVER_URL;
|
||||||
|
}
|
||||||
|
if (i == 4) {
|
||||||
|
return NimbleApplicationConfiguration.getConfigValueAsString("NimbleCustomizedSynergyServerEndpointUrl", SYNERGY_LIVE_SERVER_URL);
|
||||||
|
}
|
||||||
|
Log.Helper.LOGF(this, "Request for Synergy Director server URL with unknown NimbleConfiguration, %d.", nimbleConfiguration);
|
||||||
|
return SYNERGY_LIVE_SERVER_URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public boolean isDataAvailable() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.m_environmentDataContainer != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public boolean isUpdateInProgress() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.m_synergyStartupObject != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public Error checkAndInitiateSynergyEnvironmentUpdate() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
if (isUpdateInProgress()) {
|
||||||
|
return new Error(Error.Code.SYNERGY_ENVIRONMENT_UPDATE_FAILURE, "Update in progress.");
|
||||||
|
}
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer != null && environmentDataContainer.getMostRecentDirectorResponseTimestamp() != null) {
|
||||||
|
return new Error(Error.Code.SYNERGY_ENVIRONMENT_UPDATE_FAILURE, "Environment data already cached.");
|
||||||
|
}
|
||||||
|
if (isInSynergyEnvironmentUpdateRateLimitingPeriod()) {
|
||||||
|
Log.Helper.LOGD(this, "Attempt to re-initiate Synergy environment update blocked by rate limiting. %.2f seconds of rate limiting left", Double.valueOf(60.0d - ((System.currentTimeMillis() - this.m_synergyEnvironmentUpdateRateLimitTriggerTimestamp.longValue()) / 1000.0d)));
|
||||||
|
return new Error(Error.Code.SYNERGY_ENVIRONMENT_UPDATE_FAILURE, "Synergy environment update rate limit in effect.");
|
||||||
|
}
|
||||||
|
startSynergyEnvironmentUpdate();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public boolean isFeatureDisabled(String str) {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
return environmentDataContainer != null && environmentDataContainer.isFeatureDisabled(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public void setup() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
this.m_dataLoadedOnComponentSetup = restoreEnvironmentDataFromPersistent(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public void restore() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
if (this.m_dataLoadedOnComponentSetup) {
|
||||||
|
this.m_dataLoadedOnComponentSetup = false;
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_RESTORED_FROM_PERSISTENT);
|
||||||
|
} else {
|
||||||
|
restoreEnvironmentDataFromPersistent(false);
|
||||||
|
}
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null || environmentDataContainer.getMostRecentDirectorResponseTimestamp() == null || (System.currentTimeMillis() - this.m_environmentDataContainer.getMostRecentDirectorResponseTimestamp().longValue()) / 1000.0d > 300.0d) {
|
||||||
|
startSynergyEnvironmentUpdate();
|
||||||
|
} else {
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public void suspend() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
SynergyEnvironmentUpdater synergyEnvironmentUpdater = this.m_synergyStartupObject;
|
||||||
|
if (synergyEnvironmentUpdater != null) {
|
||||||
|
synergyEnvironmentUpdater.cancel();
|
||||||
|
this.m_synergyStartupObject = null;
|
||||||
|
}
|
||||||
|
BroadcastReceiver broadcastReceiver = this.m_networkStatusChangeReceiver;
|
||||||
|
if (broadcastReceiver != null) {
|
||||||
|
Utility.unregisterReceiver(broadcastReceiver);
|
||||||
|
this.m_networkStatusChangeReceiver = null;
|
||||||
|
}
|
||||||
|
saveEnvironmentDataToPersistent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public void resume() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
clearSynergyEnvironmentUpdateRateLimiting();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null || environmentDataContainer.getMostRecentDirectorResponseTimestamp() == null || (System.currentTimeMillis() - this.m_environmentDataContainer.getMostRecentDirectorResponseTimestamp().longValue()) / 1000.0d > 300.0d) {
|
||||||
|
startSynergyEnvironmentUpdate();
|
||||||
|
}
|
||||||
|
if (this.m_pendingStartupFinishedNotification) {
|
||||||
|
this.m_pendingStartupFinishedNotification = false;
|
||||||
|
HashMap hashMap = new HashMap();
|
||||||
|
hashMap.put("result", "1");
|
||||||
|
Log.Helper.LOGD(this, "App is running in forground, sending delayed the NOTIFICATION_STARTUP_REQUESTS_FINISHED notification", new Object[0]);
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_STARTUP_REQUESTS_FINISHED, hashMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public void cleanup() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
SynergyEnvironmentUpdater synergyEnvironmentUpdater = this.m_synergyStartupObject;
|
||||||
|
if (synergyEnvironmentUpdater != null) {
|
||||||
|
synergyEnvironmentUpdater.cancel();
|
||||||
|
this.m_synergyStartupObject = null;
|
||||||
|
}
|
||||||
|
BroadcastReceiver broadcastReceiver = this.m_networkStatusChangeReceiver;
|
||||||
|
if (broadcastReceiver != null) {
|
||||||
|
Utility.unregisterReceiver(broadcastReceiver);
|
||||||
|
this.m_networkStatusChangeReceiver = null;
|
||||||
|
}
|
||||||
|
saveEnvironmentDataToPersistent();
|
||||||
|
this.m_environmentDataContainer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.Component
|
||||||
|
public void teardown() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
this.m_environmentDataContainer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startSynergyEnvironmentUpdate() {
|
||||||
|
SynergyEnvironmentUpdater synergyEnvironmentUpdater;
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
synchronized (this) {
|
||||||
|
try {
|
||||||
|
if (this.m_synergyStartupObject == null) {
|
||||||
|
synergyEnvironmentUpdater = new SynergyEnvironmentUpdater(this.m_core);
|
||||||
|
this.m_synergyStartupObject = synergyEnvironmentUpdater;
|
||||||
|
} else {
|
||||||
|
synergyEnvironmentUpdater = null;
|
||||||
|
}
|
||||||
|
} catch (Throwable th) {
|
||||||
|
throw th;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (synergyEnvironmentUpdater == null) {
|
||||||
|
Log.Helper.LOGD(this, "Attempt made to start Synergy environment update while a previous one is active. Exiting.", new Object[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Network.getComponent().getStatus() == Network.Status.OK) {
|
||||||
|
startSynergyEnvironmentUpdateImpl(synergyEnvironmentUpdater);
|
||||||
|
} else if (this.m_networkStatusChangeReceiver == null) {
|
||||||
|
this.m_networkStatusChangeReceiver = new BroadcastReceiver() { // from class: com.ea.nimble.SynergyEnvironmentImpl.1
|
||||||
|
@Override // android.content.BroadcastReceiver
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
if (intent.getAction().equals(Global.NOTIFICATION_NETWORK_STATUS_CHANGE) && Network.getComponent().getStatus() == Network.Status.OK) {
|
||||||
|
Log.Helper.LOGD(this, "Network restored. Starting Synergy environment update.", new Object[0]);
|
||||||
|
Utility.unregisterReceiver(SynergyEnvironmentImpl.this.m_networkStatusChangeReceiver);
|
||||||
|
SynergyEnvironmentImpl.this.m_networkStatusChangeReceiver = null;
|
||||||
|
SynergyEnvironmentImpl synergyEnvironmentImpl = SynergyEnvironmentImpl.this;
|
||||||
|
synergyEnvironmentImpl.startSynergyEnvironmentUpdateImpl(synergyEnvironmentImpl.m_synergyStartupObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Log.Helper.LOGD(this, "Network not available to perform environment update. Setting receiver to listen for network status change.", new Object[0]);
|
||||||
|
Utility.registerReceiver(Global.NOTIFICATION_NETWORK_STATUS_CHANGE, this.m_networkStatusChangeReceiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* JADX INFO: Access modifiers changed from: private */
|
||||||
|
public void startSynergyEnvironmentUpdateImpl(final SynergyEnvironmentUpdater synergyEnvironmentUpdater) {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
if (synergyEnvironmentUpdater == null) {
|
||||||
|
Log.Helper.LOGD(this, "Synergy Environment Update canceled before it could start", new Object[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.m_previousValidEnvironmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
HashMap hashMap = new HashMap();
|
||||||
|
hashMap.put("result", "1");
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_STARTUP_REQUESTS_STARTED, hashMap);
|
||||||
|
synergyEnvironmentUpdater.startSynergyStartupSequence(this.m_previousValidEnvironmentDataContainer, new SynergyEnvironmentUpdater.CompletionCallback() { // from class: com.ea.nimble.SynergyEnvironmentImpl.2
|
||||||
|
@Override // com.ea.nimble.SynergyEnvironmentUpdater.CompletionCallback
|
||||||
|
public void callback(Exception exc) {
|
||||||
|
if (exc == null) {
|
||||||
|
if (SynergyEnvironmentImpl.this.m_synergyStartupObject != null && synergyEnvironmentUpdater.getEnvironmentDataContainer() != null) {
|
||||||
|
SynergyEnvironmentImpl.this.m_environmentDataContainer = synergyEnvironmentUpdater.getEnvironmentDataContainer();
|
||||||
|
SynergyEnvironmentImpl.this.saveEnvironmentDataToPersistent();
|
||||||
|
if (SynergyEnvironmentImpl.this.m_environmentDataContainer.getKeysOfDifferences(SynergyEnvironmentImpl.this.m_previousValidEnvironmentDataContainer) != null) {
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_STARTUP_ENVIRONMENT_DATA_CHANGED);
|
||||||
|
}
|
||||||
|
HashMap hashMap2 = new HashMap();
|
||||||
|
hashMap2.put("result", "1");
|
||||||
|
if (ApplicationEnvironment.isMainApplicationActive()) {
|
||||||
|
Log.Helper.LOGD(this, "App is running in forground, send the NOTIFICATION_STARTUP_REQUESTS_FINISHED notification", new Object[0]);
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_STARTUP_REQUESTS_FINISHED, hashMap2);
|
||||||
|
} else {
|
||||||
|
Log.Helper.LOGI(this, "App is not running in forground, discard the NOTIFICATION_STARTUP_REQUESTS_FINISHED notification", new Object[0]);
|
||||||
|
SynergyEnvironmentImpl.this.m_pendingStartupFinishedNotification = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.Helper.LOGD(this, "Synergy Environment Update object or dataContainer null at callback. Update was canceled", new Object[0]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.Helper.LOGE(this, "StartupError(%s)", exc);
|
||||||
|
if (!(exc instanceof Error)) {
|
||||||
|
if (SynergyEnvironmentImpl.this.m_synergyStartupObject == null || synergyEnvironmentUpdater.getEnvironmentDataContainer() == null) {
|
||||||
|
Log.Helper.LOGD(this, "Synergy Environment Update object or dataContainer null at callback. More than one update was being peroformed", new Object[0]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Error error = (Error) exc;
|
||||||
|
if (error.isError(Error.Code.SYNERGY_GET_DIRECTION_TIMEOUT) || error.isError(Error.Code.SYNERGY_SERVER_FULL)) {
|
||||||
|
Log.Helper.LOGD(this, "GetDirection request timed out or ServerUnavailable signal received. Start rate limiting of /getDirection call.", new Object[0]);
|
||||||
|
SynergyEnvironmentImpl.this.startSynergyEnvironmentUpdateRateLimiting();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HashMap hashMap3 = new HashMap();
|
||||||
|
hashMap3.put("result", "0");
|
||||||
|
hashMap3.put("error", exc.toString());
|
||||||
|
if (ApplicationEnvironment.isMainApplicationActive()) {
|
||||||
|
Log.Helper.LOGD(this, "App is running in forground, send the NOTIFICATION_STARTUP_REQUESTS_FINISHED notification", new Object[0]);
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_STARTUP_REQUESTS_FINISHED, hashMap3);
|
||||||
|
} else {
|
||||||
|
Log.Helper.LOGI(this, "App is not running in forground, discard the NOTIFICATION_STARTUP_REQUESTS_FINISHED notification", new Object[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SynergyEnvironmentImpl.this.m_synergyStartupObject = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* JADX INFO: Access modifiers changed from: private */
|
||||||
|
public void startSynergyEnvironmentUpdateRateLimiting() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
this.m_synergyEnvironmentUpdateRateLimitTriggerTimestamp = Long.valueOf(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isInSynergyEnvironmentUpdateRateLimitingPeriod() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
return this.m_synergyEnvironmentUpdateRateLimitTriggerTimestamp != null && ((double) (System.currentTimeMillis() - this.m_synergyEnvironmentUpdateRateLimitTriggerTimestamp.longValue())) <= 60000.0d;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearSynergyEnvironmentUpdateRateLimiting() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
this.m_synergyEnvironmentUpdateRateLimitTriggerTimestamp = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean restoreEnvironmentDataFromPersistent(boolean z) {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
Persistence persistenceForNimbleComponent = PersistenceService.getPersistenceForNimbleComponent(SynergyEnvironment.COMPONENT_ID, Persistence.Storage.CACHE);
|
||||||
|
if (persistenceForNimbleComponent != null) {
|
||||||
|
Serializable value = persistenceForNimbleComponent.getValue(PERSISTENCE_DATA_ID);
|
||||||
|
if (value == null) {
|
||||||
|
Log.Helper.LOGD(this, "Environment persistence data value not found in persistence object. Probably first install.", new Object[0]);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
EnvironmentDataContainer environmentDataContainer = (EnvironmentDataContainer) value;
|
||||||
|
this.m_environmentDataContainer = environmentDataContainer;
|
||||||
|
Log.Helper.LOGD(this, "Restored environment data from persistent. Restored data timestamp, %s", environmentDataContainer.getMostRecentDirectorResponseTimestamp());
|
||||||
|
if (!z) {
|
||||||
|
Utility.sendBroadcast(SynergyEnvironment.NOTIFICATION_RESTORED_FROM_PERSISTENT);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (ClassCastException unused) {
|
||||||
|
Log.Helper.LOGE(this, "Environment persistence data value is not the expected type.", new Object[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.Helper.LOGE(this, "Could not get environment persistence object to restore from", new Object[0]);
|
||||||
|
}
|
||||||
|
this.m_environmentDataContainer = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* JADX INFO: Access modifiers changed from: private */
|
||||||
|
public void saveEnvironmentDataToPersistent() {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
Persistence persistenceForNimbleComponent = PersistenceService.getPersistenceForNimbleComponent(SynergyEnvironment.COMPONENT_ID, Persistence.Storage.CACHE);
|
||||||
|
if (persistenceForNimbleComponent != null) {
|
||||||
|
Log.Helper.LOGD(this, "Saving environment data to persistent.", new Object[0]);
|
||||||
|
persistenceForNimbleComponent.setValue(PERSISTENCE_DATA_ID, this.m_environmentDataContainer);
|
||||||
|
persistenceForNimbleComponent.lambda$new$0();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Log.Helper.LOGE(this, "Could not get environment persistence object to save to.", new Object[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getNexusClientId() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getNexusClientId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getNexusClientSecret() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getNexusClientSecret();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyEnvironment
|
||||||
|
public String getGosMdmAppKey() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
checkAndInitiateSynergyEnvironmentUpdate();
|
||||||
|
EnvironmentDataContainer environmentDataContainer = this.m_environmentDataContainer;
|
||||||
|
if (environmentDataContainer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return environmentDataContainer.getGosMdmAppKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
144
decompiled-reference/com/ea/nimble/SynergyRequest.java
Normal file
144
decompiled-reference/com/ea/nimble/SynergyRequest.java
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
package com.ea.nimble;
|
||||||
|
|
||||||
|
import com.ea.nimble.Error;
|
||||||
|
import com.ea.nimble.IHttpRequest;
|
||||||
|
import com.ea.nimble.ISynergyRequest;
|
||||||
|
import com.ea.nimble.Log;
|
||||||
|
import com.ironsource.nb;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/* loaded from: classes2.dex */
|
||||||
|
public class SynergyRequest implements ISynergyRequest {
|
||||||
|
public String api;
|
||||||
|
public String baseUrl;
|
||||||
|
public HttpRequest httpRequest;
|
||||||
|
public ISynergyRequest.IJsonData jsonData;
|
||||||
|
private SynergyNetworkConnection m_connection = null;
|
||||||
|
public SynergyRequestPreparingCallback prepareRequestCallback;
|
||||||
|
public Map<String, String> urlParameters;
|
||||||
|
|
||||||
|
public interface SynergyRequestPreparingCallback {
|
||||||
|
void prepareRequest(SynergyRequest synergyRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SynergyRequest(String str, IHttpRequest.Method method, SynergyRequestPreparingCallback synergyRequestPreparingCallback) {
|
||||||
|
this.api = str;
|
||||||
|
HttpRequest httpRequest = new HttpRequest();
|
||||||
|
this.httpRequest = httpRequest;
|
||||||
|
this.prepareRequestCallback = synergyRequestPreparingCallback;
|
||||||
|
this.urlParameters = null;
|
||||||
|
this.jsonData = null;
|
||||||
|
httpRequest.method = method;
|
||||||
|
httpRequest.headers.put("Content-Type", nb.L);
|
||||||
|
this.httpRequest.headers.put("SDK-VERSION", Global.NIMBLE_RELEASE_VERSION);
|
||||||
|
this.httpRequest.headers.put("SDK-TYPE", Global.NIMBLE_ID);
|
||||||
|
String sessionId = ((SynergyNetworkImpl) SynergyNetwork.getComponent()).getSessionId();
|
||||||
|
if (Utility.validString(sessionId)) {
|
||||||
|
this.httpRequest.headers.put("EAM-SESSION", sessionId);
|
||||||
|
} else {
|
||||||
|
Log.Helper.LOGES("SynergyRequest", "Synergy Network session ID is null", new Object[0]);
|
||||||
|
}
|
||||||
|
String synergyId = SynergyIdManager.getComponent().getSynergyId();
|
||||||
|
if (Utility.validString(synergyId)) {
|
||||||
|
this.httpRequest.headers.put("EAM-USER-ID", synergyId);
|
||||||
|
}
|
||||||
|
String sellId = SynergyEnvironment.getComponent().getSellId();
|
||||||
|
if (Utility.validString(sellId)) {
|
||||||
|
this.httpRequest.headers.put("EA-SELL-ID", sellId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyRequest
|
||||||
|
public HttpRequest getHttpRequest() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.httpRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyRequest
|
||||||
|
public String getBaseUrl() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyRequest
|
||||||
|
public String getApi() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.api;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IHttpRequest.Method getMethod() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.httpRequest.getMethod();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMethod(IHttpRequest.Method method) {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
this.httpRequest.method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyRequest
|
||||||
|
public Map<String, String> getUrlParameters() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.urlParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override // com.ea.nimble.ISynergyRequest
|
||||||
|
public ISynergyRequest.IJsonData getJsonData() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
return this.jsonData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send() {
|
||||||
|
Log.Helper.LOGPUBLICFUNC(this);
|
||||||
|
this.m_connection.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prepare(SynergyNetworkConnection synergyNetworkConnection) {
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
this.m_connection = synergyNetworkConnection;
|
||||||
|
SynergyRequestPreparingCallback synergyRequestPreparingCallback = this.prepareRequestCallback;
|
||||||
|
if (synergyRequestPreparingCallback != null) {
|
||||||
|
synergyRequestPreparingCallback.prepareRequest(this);
|
||||||
|
} else {
|
||||||
|
send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void build() throws Error {
|
||||||
|
ISynergyRequest.IJsonData iJsonData;
|
||||||
|
Log.Helper.LOGFUNC(this);
|
||||||
|
if (!Utility.validString(this.baseUrl) || !Utility.validString(this.api)) {
|
||||||
|
throw new Error(Error.Code.INVALID_ARGUMENT, String.format("Invalid synergy request parameter (%s, %s) to build http request url", this.baseUrl, this.api));
|
||||||
|
}
|
||||||
|
IApplicationEnvironment component = ApplicationEnvironment.getComponent();
|
||||||
|
HashMap hashMap = new HashMap();
|
||||||
|
hashMap.put("appVer", component.getApplicationVersion());
|
||||||
|
hashMap.put("appLang", component.getShortApplicationLanguageCode());
|
||||||
|
hashMap.put("localization", component.getApplicationLanguageCode());
|
||||||
|
hashMap.put("deviceLanguage", Locale.getDefault().getLanguage());
|
||||||
|
hashMap.put(ApplicationEnvironment.NIMBLE_PARAMETER_DEVICE_LOCALE, Locale.getDefault().toString());
|
||||||
|
String eAHardwareId = SynergyEnvironment.getComponent().getEAHardwareId();
|
||||||
|
if (Utility.validString(eAHardwareId)) {
|
||||||
|
hashMap.put("hwId", eAHardwareId);
|
||||||
|
}
|
||||||
|
Map<String, String> map = this.urlParameters;
|
||||||
|
if (map != null) {
|
||||||
|
hashMap.putAll(map);
|
||||||
|
}
|
||||||
|
this.httpRequest.url = Network.generateURL(this.baseUrl + this.api, hashMap);
|
||||||
|
IHttpRequest.Method method = this.httpRequest.method;
|
||||||
|
if ((method == IHttpRequest.Method.POST || method == IHttpRequest.Method.PUT) && (iJsonData = this.jsonData) != null && iJsonData.size() > 0) {
|
||||||
|
String convertObjectToJSONString = Utility.convertObjectToJSONString(this.jsonData.getData());
|
||||||
|
this.httpRequest.data = new ByteArrayOutputStream();
|
||||||
|
try {
|
||||||
|
this.httpRequest.data.write(convertObjectToJSONString.getBytes());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new Error(Error.Code.INVALID_ARGUMENT, "Error converting jsonData in SynergyRequest to a data stream", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
package com.firemonkeys.cloudcellapi;
|
||||||
|
|
||||||
|
import com.mbridge.msdk.newreward.function.common.MBridgeCommon;
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import javax.net.ssl.TrustManager;
|
||||||
|
import org.apache.http.conn.ssl.SSLSocketFactory;
|
||||||
|
|
||||||
|
/* loaded from: classes2.dex */
|
||||||
|
public class HttpRequest {
|
||||||
|
private static final String CLASSNAME = "HttpRequest";
|
||||||
|
private static boolean s_sslContextInit = false;
|
||||||
|
public static String s_userAgent;
|
||||||
|
HttpThread m_thread = null;
|
||||||
|
private double m_serverTime = 0.0d;
|
||||||
|
private boolean m_bSSLCheck = false;
|
||||||
|
private int m_TimeoutMilliseconds = MBridgeCommon.DEFAULT_LOAD_TIMEOUT;
|
||||||
|
|
||||||
|
public native void completeCallback(long j, int i);
|
||||||
|
|
||||||
|
public native void dataCallback(long j, byte[] bArr, int i);
|
||||||
|
|
||||||
|
public native void errorCallback(long j, int i);
|
||||||
|
|
||||||
|
public boolean getSSLCheck() {
|
||||||
|
return this.m_bSSLCheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getServerTime() {
|
||||||
|
return this.m_serverTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTimeoutMilliseconds() {
|
||||||
|
return this.m_TimeoutMilliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public native void headerCallback(long j, int i, Map<String, List<String>> map);
|
||||||
|
|
||||||
|
public boolean isClosed() {
|
||||||
|
return this.m_thread == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpRequest() {
|
||||||
|
System.setProperty("http.keepAlive", "false");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(String str, String str2, String str3, byte[] bArr, int i, long j, boolean z, double d, boolean z2, boolean z3, int i2) {
|
||||||
|
this.m_serverTime = d;
|
||||||
|
this.m_bSSLCheck = z2;
|
||||||
|
if (i2 > 0) {
|
||||||
|
this.m_TimeoutMilliseconds = i2 * 1000;
|
||||||
|
}
|
||||||
|
initSSLContext();
|
||||||
|
initUserAgent(str);
|
||||||
|
this.m_thread = new HttpThread(this, str2, str3, bArr, i, j, z, z3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClosedBySSLCheck(boolean z) {
|
||||||
|
this.m_thread.setClosedBySSLCheck(z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() {
|
||||||
|
HttpThread httpThread = this.m_thread;
|
||||||
|
if (httpThread != null) {
|
||||||
|
httpThread.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addHeader(String str, String str2) {
|
||||||
|
this.m_thread.addHeader(str, str2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void post() {
|
||||||
|
HttpThread httpThread = this.m_thread;
|
||||||
|
if (httpThread == null) {
|
||||||
|
Logging.CC_ERROR(CLASSNAME, "post() called but thread is already closed");
|
||||||
|
} else if (httpThread.isAlive()) {
|
||||||
|
Logging.CC_ERROR(CLASSNAME, "post() called but thread is already running");
|
||||||
|
} else {
|
||||||
|
this.m_thread.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
HttpThread httpThread = this.m_thread;
|
||||||
|
if (httpThread != null) {
|
||||||
|
httpThread.interrupt();
|
||||||
|
}
|
||||||
|
this.m_thread = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void initUserAgent(String str) {
|
||||||
|
if (s_userAgent != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s_userAgent = str + " " + System.getProperty("http.agent");
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("User Agent: ");
|
||||||
|
sb.append(s_userAgent);
|
||||||
|
Logging.CC_INFO(CLASSNAME, sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initSSLContext() {
|
||||||
|
try {
|
||||||
|
SSLContext sSLContext = SSLContext.getInstance("TLS");
|
||||||
|
sSLContext.init(null, new TrustManager[]{new CloudcellTrustManager(this)}, new SecureRandom());
|
||||||
|
HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory(sSLContext.getSocketFactory()));
|
||||||
|
HttpsURLConnection.setDefaultHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||||
|
} catch (Exception unused) {
|
||||||
|
Logging.CC_ERROR(CLASSNAME, "Exception when trying to init SSLContext!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
982
decompiled-reference/resources/AndroidManifest.xml
Normal file
982
decompiled-reference/resources/AndroidManifest.xml
Normal file
@@ -0,0 +1,982 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:versionCode="14001"
|
||||||
|
android:versionName="14.0.1"
|
||||||
|
android:installLocation="auto"
|
||||||
|
android:compileSdkVersion="36"
|
||||||
|
android:compileSdkVersionCodename="16"
|
||||||
|
package="com.ea.games.r3_row"
|
||||||
|
platformBuildVersionCode="36"
|
||||||
|
platformBuildVersionName="16">
|
||||||
|
<uses-sdk
|
||||||
|
android:minSdkVersion="26"
|
||||||
|
android:targetSdkVersion="36"/>
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
|
android:maxSdkVersion="23"/>
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||||
|
android:maxSdkVersion="23"/>
|
||||||
|
<uses-permission android:name="android.permission.CAMERA"/>
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||||
|
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
|
<uses-permission android:name="com.android.vending.BILLING"/>
|
||||||
|
<uses-permission android:name="BIND_GET_INSTALL_REFERRER_SERVICE"/>
|
||||||
|
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
|
||||||
|
<uses-permission
|
||||||
|
android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"
|
||||||
|
android:maxSdkVersion="22"/>
|
||||||
|
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.WAKE_LOCK"
|
||||||
|
android:maxSdkVersion="25"/>
|
||||||
|
<uses-feature
|
||||||
|
android:name="android.hardware.camera"
|
||||||
|
android:required="false"/>
|
||||||
|
<uses-feature
|
||||||
|
android:name="android.hardware.camera.autofocus"
|
||||||
|
android:required="false"/>
|
||||||
|
<uses-feature
|
||||||
|
android:name="android.hardware.sensor.accelerometer"
|
||||||
|
android:required="false"/>
|
||||||
|
<uses-feature
|
||||||
|
android:name="android.hardware.touchscreen"
|
||||||
|
android:required="false"/>
|
||||||
|
<uses-feature
|
||||||
|
android:name="android.hardware.gamepad"
|
||||||
|
android:required="false"/>
|
||||||
|
<uses-feature
|
||||||
|
android:glEsVersion="0x20000"
|
||||||
|
android:required="true"/>
|
||||||
|
<supports-screens
|
||||||
|
android:anyDensity="true"
|
||||||
|
android:smallScreens="false"
|
||||||
|
android:normalScreens="true"
|
||||||
|
android:largeScreens="true"
|
||||||
|
android:xlargeScreens="true"/>
|
||||||
|
<queries>
|
||||||
|
<intent>
|
||||||
|
<action android:name="com.applovin.am.intent.action.APPHUB_SERVICE"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.support.customtabs.action.CustomTabsService"/>
|
||||||
|
</intent>
|
||||||
|
<package android:name="com.facebook.katana"/>
|
||||||
|
<intent>
|
||||||
|
<action android:name="com.digitalturbine.ignite.cl.IgniteRemoteService"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
<data android:scheme="https"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.INSERT"/>
|
||||||
|
<data android:mimeType="vnd.android.cursor.dir/event"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<data android:scheme="sms"/>
|
||||||
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.DIAL"/>
|
||||||
|
<data android:path="tel:"/>
|
||||||
|
</intent>
|
||||||
|
<package android:name="com.google.android.gms"/>
|
||||||
|
<package android:name="com.android.vending"/>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.media.browse.MediaBrowserService"/>
|
||||||
|
</intent>
|
||||||
|
<package android:name="com.google.ar.core"/>
|
||||||
|
<intent>
|
||||||
|
<action android:name="com.android.vending.billing.InAppBillingService.BIND"/>
|
||||||
|
</intent>
|
||||||
|
</queries>
|
||||||
|
<uses-permission android:name="com.applovin.array.apphub.permission.BIND_APPHUB_SERVICE"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_AD_ID"/>
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
|
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
|
||||||
|
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
|
||||||
|
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
|
||||||
|
<uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>
|
||||||
|
<permission
|
||||||
|
android:name="com.ea.games.r3_row.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
|
||||||
|
android:protectionLevel="signature"/>
|
||||||
|
<uses-permission android:name="com.ea.games.r3_row.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
|
||||||
|
<application
|
||||||
|
android:theme="@style/splashScreenTheme"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:icon="@string/icon_name_row"
|
||||||
|
android:name="androidx.multidex.MultiDexApplication"
|
||||||
|
android:screenOrientation="sensorLandscape"
|
||||||
|
android:windowSoftInputMode="adjustNothing"
|
||||||
|
android:hardwareAccelerated="true"
|
||||||
|
android:largeHeap="true"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
android:banner="@string/icon_name_tv_row"
|
||||||
|
android:isGame="true"
|
||||||
|
android:extractNativeLibs="false"
|
||||||
|
android:fullBackupContent="@xml/backup_legacy"
|
||||||
|
android:usesCleartextTraffic="false"
|
||||||
|
android:resizeableActivity="false"
|
||||||
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
|
android:roundIcon="@string/icon_name_round_row"
|
||||||
|
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
|
||||||
|
android:dataExtractionRules="@xml/backup_android12"
|
||||||
|
android:localeConfig="@xml/locale_config">
|
||||||
|
<activity
|
||||||
|
android:theme="@style/splashScreenTheme"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:name="com.firemint.realracing.UnpackAssetsActivity"
|
||||||
|
android:exported="true"
|
||||||
|
android:launchMode="singleTask"
|
||||||
|
android:screenOrientation="sensorLandscape"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|uiMode|orientation|keyboardHidden|keyboard"
|
||||||
|
android:alwaysRetainTaskState="true"
|
||||||
|
android:hardwareAccelerated="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.google.android.apps.plus.VIEW_DEEP_LINK"/>
|
||||||
|
<data android:scheme="vnd.google.deeplink"/>
|
||||||
|
<data android:scheme="rr3"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/splashScreenTheme"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:name="com.firemint.realracing.MainActivity"
|
||||||
|
android:launchMode="singleTask"
|
||||||
|
android:screenOrientation="sensorLandscape"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|uiMode|orientation|keyboardHidden|keyboard"
|
||||||
|
android:alwaysRetainTaskState="true"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<property
|
||||||
|
android:name="android.adservices.AD_SERVICES_CONFIG"
|
||||||
|
android:resource="@xml/gma_ad_services_config"/>
|
||||||
|
<provider
|
||||||
|
android:name="androidx.core.content.FileProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.fileprovider"
|
||||||
|
android:grantUriPermissions="true">
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
|
android:resource="@xml/file_paths"/>
|
||||||
|
</provider>
|
||||||
|
<meta-data
|
||||||
|
android:name="xperiaplayoptimized_content"
|
||||||
|
android:value="@mipmap/ic_launcher"
|
||||||
|
android:resource="@mipmap/ic_launcher"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="game_display_name"
|
||||||
|
android:value="@string/app_name"
|
||||||
|
android:resource="@string/app_name"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="game_icon"
|
||||||
|
android:value="@mipmap/ic_launcher"
|
||||||
|
android:resource="@mipmap/ic_launcher"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="android.max_aspect"
|
||||||
|
android:value="2.4"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.ar.core"
|
||||||
|
android:value="optional"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.ea.nimble.ReferrerReceiver"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.android.vending.INSTALL_REFERRER"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="com.firemint.realracing.LocalNotificationBroadcastReceiver"
|
||||||
|
android:exported="true"/>
|
||||||
|
<service
|
||||||
|
android:name="com.firemint.realracing.DelayedNotificationService"
|
||||||
|
android:permission="android.permission.BIND_JOB_SERVICE"
|
||||||
|
android:exported="true"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.firemint.realracing.BootReceiver"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||||
|
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.configuration"
|
||||||
|
android:value="live"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.tracking.defaultEnable"
|
||||||
|
android:value="@string/nimble_trackingEnableFlag"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.mtx.enableVerification"
|
||||||
|
android:value="@string/nimble_mtx_enableVerification"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.mtx.reportingEnabled"
|
||||||
|
android:value="@string/nimble_mtx_reportingEnabled"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.pushtng.auth.api.key"
|
||||||
|
android:resource="@string/nimble_api_key_live"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.pushtng.auth.api.secret"
|
||||||
|
android:resource="@string/nimble_api_secret_live"/>
|
||||||
|
<service
|
||||||
|
android:name="com.firemint.realracing.RRPushService"
|
||||||
|
android:exported="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
||||||
|
</intent-filter>
|
||||||
|
</service>
|
||||||
|
<receiver
|
||||||
|
android:name="com.firemint.realracing.RRPushTNGBroadcastForwarder"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.ea.eadp.pushnotification.FORWARD_AS_ORDERED_BROADCAST"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<service
|
||||||
|
android:name="com.firemint.realracing.RRPushTNGIntentService"
|
||||||
|
android:permission="android.permission.BIND_JOB_SERVICE"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.pushtng.channel.id"
|
||||||
|
android:value="@string/NOTIFICATION_CHANNEL_GENERAL_ID"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.ea.nimble.NimbleLocalNotifications.channel.id"
|
||||||
|
android:value="@string/NOTIFICATION_CHANNEL_GENERAL_ID"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.version"
|
||||||
|
android:value="@integer/google_play_services_version"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.games.APP_ID"
|
||||||
|
android:value="@string/app_id"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:windowSoftInputMode="adjustPan|stateAlwaysHidden"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.ads.APPLICATION_ID"
|
||||||
|
android:value="ca-app-pub-9518260973309814~6662120154"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
|
||||||
|
android:value="true"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.facebook.sdk.ApplicationId"
|
||||||
|
android:value="@string/fb_app_id"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.facebook.sdk.ApplicationName"
|
||||||
|
android:value="@string/app_name"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.facebook.sdk.ClientToken"
|
||||||
|
android:value="@string/facebook_client_token"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.facebook.sdk.AutoLogAppEventsEnabled"
|
||||||
|
android:value="false"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.facebook.sdk.AutoInitEnabled"
|
||||||
|
android:value="false"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com_facebook_activity_theme"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:name="com.facebook.FacebookActivity"
|
||||||
|
android:configChanges="screenSize|screenLayout|orientation|keyboardHidden|keyboard"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.facebook.CustomTabActivity"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
<data android:scheme="@string/fb_login_protocol_scheme"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
<data
|
||||||
|
android:scheme="fbconnect"
|
||||||
|
android:host="cct.com.ea.games.r3_row"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<service
|
||||||
|
android:name="com.firemonkeys.cloudcellapi.AndroidAssetManagerService"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="firebase_analytics_collection_enabled"
|
||||||
|
android:value="false"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="firebase_crashlytics_collection_enabled"
|
||||||
|
android:value="false"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="firebase_performance_collection_enabled"
|
||||||
|
android:value="false"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="firebase_performance_logcat_enabled"
|
||||||
|
android:value="false"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.vungle.warren.NetworkProviderReceiver"
|
||||||
|
android:exported="false"/>
|
||||||
|
<provider
|
||||||
|
android:name="com.applovin.sdk.AppLovinInitProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.applovininitprovider"
|
||||||
|
android:initOrder="101"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.applovin.adview.AppLovinFullscreenActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:screenOrientation="behind"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.applovin.sdk.AppLovinWebViewActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.applovin.mediation.hybridAds.MaxHybridMRecAdActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.applovin.mediation.hybridAds.MaxHybridNativeAdActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerDetailActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerMultiAdActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerAdUnitsListActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerAdUnitWaterfallsListActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerAdUnitDetailActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerCmpNetworksListActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerTcfConsentStatusesListActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerTcfInfoListActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerTcfStringActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerTestLiveNetworkActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerTestModeNetworkActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerUnifiedFlowActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.mediation.MaxDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.mediation.MaxDebuggerWaterfallSegmentsActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.creative.CreativeDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.creative.MaxCreativeDebuggerActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/com.applovin.creative.CreativeDebuggerActivity.Theme"
|
||||||
|
android:name="com.applovin.creative.MaxCreativeDebuggerDisplayedAdActivity"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale"/>
|
||||||
|
<service
|
||||||
|
android:name="com.applovin.impl.adview.activity.FullscreenAdService"
|
||||||
|
android:exported="false"
|
||||||
|
android:stopWithTask="false"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.facebook.ads.AudienceNetworkActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|screenLayout|orientation|keyboardHidden"/>
|
||||||
|
<provider
|
||||||
|
android:name="com.facebook.ads.AudienceNetworkContentProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.AudienceNetworkContentProvider"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.fyber.inneractive.sdk.activities.InneractiveInternalBrowserActivity"
|
||||||
|
android:screenOrientation="fullUser"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.fyber.inneractive.sdk.activities.InneractiveFullscreenAdActivity"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.fyber.inneractive.sdk.activities.InneractiveRichMediaVideoPlayerActivityCore"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.fyber.inneractive.sdk.activities.InternalStoreWebpageActivity"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:screenOrientation="sensor"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|screenLayout|orientation|keyboardHidden"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.fyber.inneractive.sdk.activities.FyberReportAdActivity"
|
||||||
|
android:screenOrientation="fullUser"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
|
||||||
|
android:value="true"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.ironsource.sdk.controller.ControllerActivity"
|
||||||
|
android:configChanges="screenSize|orientation"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent"
|
||||||
|
android:name="com.ironsource.sdk.controller.InterstitialActivity"
|
||||||
|
android:configChanges="screenSize|orientation"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent"
|
||||||
|
android:name="com.ironsource.sdk.controller.OpenUrlActivity"
|
||||||
|
android:configChanges="screenSize|orientation"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.tapjoy.mraid.view.ActionHandler"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.tapjoy.mraid.view.Browser"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar"
|
||||||
|
android:name="com.ironsource.mediationsdk.testSuite.TestSuiteActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="screenSize|orientation"
|
||||||
|
android:hardwareAccelerated="true">
|
||||||
|
<meta-data
|
||||||
|
android:name="android.webkit.WebView.EnableSafeBrowsing"
|
||||||
|
android:value="true"/>
|
||||||
|
</activity>
|
||||||
|
<provider
|
||||||
|
android:name="com.ironsource.lifecycle.IronsourceLifecycleProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.IronsourceLifecycleProvider"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.mbridge.msdk.interstitial.view.MBInterstitialActivity"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:configChanges="screenSize|orientation"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.mbridge.msdk.newreward.player.MBRewardVideoActivity"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.mbridge.msdk.reward.player.MBRewardVideoActivity"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/mbridge_transparent_common_activity_style"
|
||||||
|
android:name="com.mbridge.msdk.activity.MBCommonActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:configChanges="orientation|keyboard"/>
|
||||||
|
<activity android:name="com.mbridge.msdk.out.LoadingActivity"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.mbridge.msdk.foundation.same.broadcast.NetWorkChangeReceiver"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/TranslucentTheme"
|
||||||
|
android:name="com.tapjoy.TJAdUnitActivity"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/TranslucentTheme"
|
||||||
|
android:name="com.tapjoy.TJWebViewActivity"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.unity3d.services.ads.adunit.AdUnitActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|navigation|keyboardHidden|keyboard|touchscreen|locale|mnc|mcc"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.unity3d.services.ads.adunit.AdUnitTransparentActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|navigation|keyboardHidden|keyboard|touchscreen|locale|mnc|mcc"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.unity3d.services.ads.adunit.AdUnitTransparentSoftwareActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|navigation|keyboardHidden|keyboard|touchscreen|locale|mnc|mcc"
|
||||||
|
android:hardwareAccelerated="false"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.unity3d.services.ads.adunit.AdUnitSoftwareActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|navigation|keyboardHidden|keyboard|touchscreen|locale|mnc|mcc"
|
||||||
|
android:hardwareAccelerated="false"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.unity3d.ads.adplayer.FullScreenWebViewDisplay"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="fontScale|smallestScreenSize|screenSize|uiMode|screenLayout|orientation|navigation|keyboardHidden|keyboard|touchscreen|locale|mnc|mcc"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<provider
|
||||||
|
android:name="androidx.startup.InitializationProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.androidx-startup">
|
||||||
|
<meta-data
|
||||||
|
android:name="androidx.lifecycle.ProcessLifecycleInitializer"
|
||||||
|
android:value="androidx.startup"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.unity3d.services.core.configuration.AdsSdkInitializer"
|
||||||
|
android:value="androidx.startup"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="androidx.work.WorkManagerInitializer"
|
||||||
|
android:value="androidx.startup"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="androidx.emoji2.text.EmojiCompatInitializer"
|
||||||
|
android:value="androidx.startup"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="androidx.profileinstaller.ProfileInstallerInitializer"
|
||||||
|
android:value="androidx.startup"/>
|
||||||
|
</provider>
|
||||||
|
<activity
|
||||||
|
android:name="com.vungle.ads.internal.ui.VungleActivity"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:hardwareAccelerated="true"/>
|
||||||
|
<uses-library
|
||||||
|
android:name="org.apache.http.legacy"
|
||||||
|
android:required="false"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/Theme.AppCompat.NoActionBar"
|
||||||
|
android:name="com.helpshift.activities.HSMainActivity"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:configChanges="screenSize|orientation"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/Theme.AppCompat.NoActionBar"
|
||||||
|
android:name="com.helpshift.activities.HSDebugActivity"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:configChanges="screenSize|orientation"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent"
|
||||||
|
android:name="com.google.android.gms.ads.AdActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard"/>
|
||||||
|
<provider
|
||||||
|
android:name="com.google.android.gms.ads.MobileAdsInitProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.mobileadsinitprovider"
|
||||||
|
android:initOrder="100"/>
|
||||||
|
<service
|
||||||
|
android:name="com.google.android.gms.ads.AdService"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.google.android.gms.ads.OutOfContextTestingActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="smallestScreenSize|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.google.android.gms.ads.NotificationHandlerActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:taskAffinity=""
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:launchMode="singleTask"/>
|
||||||
|
<property
|
||||||
|
android:name="android.adservices.AD_SERVICES_CONFIG"
|
||||||
|
android:resource="@xml/gma_ad_services_config"/>
|
||||||
|
<service
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.SystemAlarmService"
|
||||||
|
android:enabled="@bool/enable_system_alarm_service_default"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false"/>
|
||||||
|
<service
|
||||||
|
android:name="androidx.work.impl.background.systemjob.SystemJobService"
|
||||||
|
android:permission="android.permission.BIND_JOB_SERVICE"
|
||||||
|
android:enabled="@bool/enable_system_job_service_default"
|
||||||
|
android:exported="true"
|
||||||
|
android:directBootAware="false"/>
|
||||||
|
<service
|
||||||
|
android:name="androidx.work.impl.foreground.SystemForegroundService"
|
||||||
|
android:enabled="@bool/enable_system_foreground_service_default"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false"/>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.utils.ForceStopRunnable.BroadcastReceiver"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false"/>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy.BatteryChargingProxy"
|
||||||
|
android:enabled="false"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
|
||||||
|
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy.BatteryNotLowProxy"
|
||||||
|
android:enabled="false"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.BATTERY_OKAY"/>
|
||||||
|
<action android:name="android.intent.action.BATTERY_LOW"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy.StorageNotLowProxy"
|
||||||
|
android:enabled="false"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.DEVICE_STORAGE_LOW"/>
|
||||||
|
<action android:name="android.intent.action.DEVICE_STORAGE_OK"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.ConstraintProxy.NetworkStateProxy"
|
||||||
|
android:enabled="false"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.RescheduleReceiver"
|
||||||
|
android:enabled="false"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||||
|
<action android:name="android.intent.action.TIME_SET"/>
|
||||||
|
<action android:name="android.intent.action.TIMEZONE_CHANGED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiver"
|
||||||
|
android:enabled="@bool/enable_system_alarm_service_default"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="androidx.work.impl.background.systemalarm.UpdateProxies"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.work.impl.diagnostics.DiagnosticsReceiver"
|
||||||
|
android:permission="android.permission.DUMP"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="true"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="androidx.work.diagnostics.REQUEST_DIAGNOSTICS"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<service
|
||||||
|
android:name="androidx.room.MultiInstanceInvalidationService"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="true"/>
|
||||||
|
<service
|
||||||
|
android:name="com.google.firebase.components.ComponentDiscoveryService"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="true">
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.perf.FirebasePerfKtxRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.perf.FirebasePerfRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingKtxRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.messaging.FirebaseMessagingRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.crashlytics.ndk.CrashlyticsNdkRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.remoteconfig.FirebaseRemoteConfigKtxRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.remoteconfig.RemoteConfigRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.crashlytics.FirebaseCrashlyticsKtxRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.crashlytics.CrashlyticsRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.sessions.FirebaseSessionsRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsKtxRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.installations.FirebaseInstallationsRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.ktx.FirebaseCommonLegacyRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.FirebaseCommonKtxRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.abt.component.AbtRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.components:com.google.firebase.datatransport.TransportRegistrar"
|
||||||
|
android:value="com.google.firebase.components.ComponentRegistrar"/>
|
||||||
|
</service>
|
||||||
|
<activity android:name="com.facebook.CustomTabMainActivity"/>
|
||||||
|
<service
|
||||||
|
android:name="androidx.credentials.playservices.CredentialProviderMetadataHolder"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false">
|
||||||
|
<meta-data
|
||||||
|
android:name="androidx.credentials.CREDENTIAL_PROVIDER_KEY"
|
||||||
|
android:value="androidx.credentials.playservices.CredentialProviderPlayServicesImpl"/>
|
||||||
|
</service>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/Theme.Hidden"
|
||||||
|
android:name="androidx.credentials.playservices.HiddenActivity"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="screenSize|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:fitsSystemWindows="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/Theme.Hidden"
|
||||||
|
android:name="androidx.credentials.playservices.IdentityCredentialApiHiddenActivity"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="screenSize|screenLayout|orientation|keyboardHidden"
|
||||||
|
android:fitsSystemWindows="true"/>
|
||||||
|
<provider
|
||||||
|
android:name="com.google.android.gms.games.provider.PlayGamesInitProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.playgamesinitprovider"
|
||||||
|
android:initOrder="99"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/Theme.Games.Transparent"
|
||||||
|
android:name="com.google.android.gms.games.internal.v2.resolution.GamesResolutionActivity"
|
||||||
|
android:exported="false"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@style/Theme.Games.Transparent"
|
||||||
|
android:name="com.google.android.gms.games.internal.v2.appshortcuts.PlayGamesAppShortcutsActivity"
|
||||||
|
android:exported="true"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.games.version"
|
||||||
|
android:value="@string/play_games_sdk_version"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
|
||||||
|
android:permission="com.google.android.c2dm.permission.SEND"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.cloudmessaging.FINISHED_AFTER_HANDLED"
|
||||||
|
android:value="true"/>
|
||||||
|
</receiver>
|
||||||
|
<service
|
||||||
|
android:name="com.google.firebase.messaging.FirebaseMessagingService"
|
||||||
|
android:exported="false"
|
||||||
|
android:directBootAware="true">
|
||||||
|
<intent-filter android:priority="-500">
|
||||||
|
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
||||||
|
</intent-filter>
|
||||||
|
</service>
|
||||||
|
<service
|
||||||
|
android:name="com.google.android.gms.auth.api.signin.RevocationBoundService"
|
||||||
|
android:permission="com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION"
|
||||||
|
android:exported="true"
|
||||||
|
android:visibleToInstantApps="true"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.google.android.gms.common.api.GoogleApiActivity"
|
||||||
|
android:exported="false"/>
|
||||||
|
<property
|
||||||
|
android:name="android.adservices.AD_SERVICES_CONFIG"
|
||||||
|
android:resource="@xml/ga_ad_services_config"/>
|
||||||
|
<service
|
||||||
|
android:name="com.google.firebase.sessions.SessionLifecycleService"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"/>
|
||||||
|
<provider
|
||||||
|
android:name="com.google.firebase.provider.FirebaseInitProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.firebaseinitprovider"
|
||||||
|
android:initOrder="100"
|
||||||
|
android:directBootAware="true"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"/>
|
||||||
|
<service
|
||||||
|
android:name="com.google.android.gms.measurement.AppMeasurementService"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"/>
|
||||||
|
<service
|
||||||
|
android:name="com.google.android.gms.measurement.AppMeasurementJobService"
|
||||||
|
android:permission="android.permission.BIND_JOB_SERVICE"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false"/>
|
||||||
|
<uses-library
|
||||||
|
android:name="android.ext.adservices"
|
||||||
|
android:required="false"/>
|
||||||
|
<provider
|
||||||
|
android:name="com.facebook.internal.FacebookInitProvider"
|
||||||
|
android:exported="false"
|
||||||
|
android:authorities="com.ea.games.r3_row.FacebookInitProvider"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.facebook.CurrentAccessTokenExpirationBroadcastReceiver"
|
||||||
|
android:exported="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.facebook.sdk.ACTION_CURRENT_ACCESS_TOKEN_CHANGED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<receiver
|
||||||
|
android:name="com.facebook.AuthenticationTokenManager.CurrentAuthenticationTokenChangedBroadcastReceiver"
|
||||||
|
android:exported="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.facebook.sdk.ACTION_CURRENT_AUTHENTICATION_TOKEN_CHANGED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.ar.core.min_apk_version"
|
||||||
|
android:value="220920000"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Material.Light.Dialog.Alert"
|
||||||
|
android:name="com.google.ar.core.InstallActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:configChanges="screenSize|orientation|keyboardHidden"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.ea.nimble.CustomTabActivity"
|
||||||
|
android:configChanges="screenSize|screenLayout|orientation|keyboardHidden|keyboard"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
|
||||||
|
android:name="com.ea.nimble.WebView"/>
|
||||||
|
<activity
|
||||||
|
android:name="com.ea.nimble.AuthResultActivity"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<receiver
|
||||||
|
android:name="com.ea.nimble.NimbleLocalNotificationReceiver"
|
||||||
|
android:exported="false"/>
|
||||||
|
<service
|
||||||
|
android:name="com.ea.nimble.pushtng.NimblePushTNGIntentService"
|
||||||
|
android:permission="android.permission.BIND_JOB_SERVICE"/>
|
||||||
|
<service
|
||||||
|
android:name="com.ea.nimble.pushtng.NimblePushTNGBroadcastReceiver"
|
||||||
|
android:exported="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
||||||
|
</intent-filter>
|
||||||
|
</service>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.play.billingclient.version"
|
||||||
|
android:value="6.0.1"/>
|
||||||
|
<activity
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||||
|
android:name="com.android.billingclient.api.ProxyBillingActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:configChanges="screenSize|screenLayout|orientation|keyboardHidden|keyboard"/>
|
||||||
|
<receiver
|
||||||
|
android:name="androidx.profileinstaller.ProfileInstallReceiver"
|
||||||
|
android:permission="android.permission.DUMP"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="true"
|
||||||
|
android:directBootAware="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="androidx.profileinstaller.action.INSTALL_PROFILE"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="androidx.profileinstaller.action.SKIP_FILE"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="androidx.profileinstaller.action.SAVE_PROFILE"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
<service
|
||||||
|
android:name="com.google.android.datatransport.runtime.backends.TransportBackendDiscovery"
|
||||||
|
android:exported="false">
|
||||||
|
<meta-data
|
||||||
|
android:name="backend:com.google.android.datatransport.cct.CctBackendFactory"
|
||||||
|
android:value="cct"/>
|
||||||
|
</service>
|
||||||
|
<service
|
||||||
|
android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.JobInfoSchedulerService"
|
||||||
|
android:permission="android.permission.BIND_JOB_SERVICE"
|
||||||
|
android:exported="false"/>
|
||||||
|
<receiver
|
||||||
|
android:name="com.google.android.datatransport.runtime.scheduling.jobscheduling.AlarmManagerSchedulerBroadcastReceiver"
|
||||||
|
android:exported="false"/>
|
||||||
|
</application>
|
||||||
|
</manifest>
|
||||||
Reference in New Issue
Block a user