- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
278 lines
10 KiB
Java
278 lines
10 KiB
Java
package com.firemint.realracing;
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.app.Activity;
|
|
import android.app.PendingIntent;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.IntentFilter;
|
|
import android.nfc.FormatException;
|
|
import android.nfc.NdefMessage;
|
|
import android.nfc.NdefRecord;
|
|
import android.nfc.NfcAdapter;
|
|
import android.nfc.NfcEvent;
|
|
import android.nfc.Tag;
|
|
import android.nfc.TagLostException;
|
|
import android.nfc.tech.Ndef;
|
|
import android.nfc.tech.NdefFormatable;
|
|
import android.os.Parcelable;
|
|
import com.google.android.gms.drive.DriveFile;
|
|
import java.io.IOException;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public class fmNfcManager implements NfcAdapter.CreateNdefMessageCallback {
|
|
static boolean m_bLog = true;
|
|
NdefMessage m_ndefMessage = null;
|
|
fmNfcData m_fmNfcData = null;
|
|
NfcMode m_eNfcMode = NfcMode.NfcMode_Read;
|
|
MainActivity m_activity = null;
|
|
NfcAdapter m_nfcAdapter = null;
|
|
boolean m_bForegroundDispatchEnabled = false;
|
|
|
|
public enum NfcMode {
|
|
NfcMode_Read,
|
|
NfcMode_Write
|
|
}
|
|
|
|
public native byte[] GetNfcDataToTransmitJNI();
|
|
|
|
public native void NfcMessageReceivedJNI(byte[] bArr, int i);
|
|
|
|
public void SetNfcMode(NfcMode nfcMode) {
|
|
this.m_eNfcMode = nfcMode;
|
|
if (nfcMode == NfcMode.NfcMode_Read) {
|
|
Log("Setting mode to read");
|
|
} else if (nfcMode == NfcMode.NfcMode_Write) {
|
|
Log("Setting mode to write");
|
|
}
|
|
}
|
|
|
|
public static void Log(String str) {
|
|
if (m_bLog) {
|
|
str.length();
|
|
}
|
|
}
|
|
|
|
public static void LogSeparator() {
|
|
Log("--------------------");
|
|
}
|
|
|
|
public boolean IsNfcAvailable() {
|
|
if (this.m_nfcAdapter == null) {
|
|
this.m_nfcAdapter = NfcAdapter.getDefaultAdapter(this.m_activity);
|
|
}
|
|
return this.m_nfcAdapter != null;
|
|
}
|
|
|
|
public void Initalise(Object obj) {
|
|
if (!(obj instanceof Activity)) {
|
|
Log("Failed to cast object to activity :(");
|
|
} else {
|
|
this.m_activity = (MainActivity) obj;
|
|
}
|
|
NfcAdapter defaultAdapter = NfcAdapter.getDefaultAdapter(this.m_activity);
|
|
this.m_nfcAdapter = defaultAdapter;
|
|
if (defaultAdapter != null) {
|
|
EnableForegroundDispatch();
|
|
}
|
|
}
|
|
|
|
@Override // android.nfc.NfcAdapter.CreateNdefMessageCallback
|
|
public NdefMessage createNdefMessage(NfcEvent nfcEvent) {
|
|
Log("createNdefMessage callback");
|
|
NdefMessage CreateNdefMessage = CreateNdefMessage(GetNfcDataToTransmitJNI());
|
|
this.m_ndefMessage = CreateNdefMessage;
|
|
return CreateNdefMessage;
|
|
}
|
|
|
|
public void onPause() {
|
|
DisableForegroundDispatch();
|
|
}
|
|
|
|
public void onResume() {
|
|
EnableForegroundDispatch();
|
|
}
|
|
|
|
public void HandleIntent(Intent intent) {
|
|
Log("HandleIntent");
|
|
if (intent != null) {
|
|
if (intent.getAction() != null) {
|
|
Log("Intent action: " + intent.getAction());
|
|
}
|
|
if (IsNfcAvailable()) {
|
|
if (this.m_eNfcMode == NfcMode.NfcMode_Read) {
|
|
Log("Read NFC message");
|
|
ReadNfcMessage(intent);
|
|
} else {
|
|
Log("Write NFC message");
|
|
WriteNfcMessage(intent);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ReadNfcMessage(Intent intent) {
|
|
Parcelable[] parcelableArrayExtra = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");
|
|
if (parcelableArrayExtra != null) {
|
|
Log("Received a message :)");
|
|
if (parcelableArrayExtra.length > 0) {
|
|
for (Parcelable parcelable : parcelableArrayExtra) {
|
|
NdefMessage ndefMessage = (NdefMessage) parcelable;
|
|
if (ndefMessage != null) {
|
|
NdefRecord[] records = ndefMessage.getRecords();
|
|
if (records.length > 0) {
|
|
NdefRecord ndefRecord = records[0];
|
|
if (ndefRecord != null) {
|
|
fmNfcData fmnfcdata = new fmNfcData();
|
|
fmnfcdata.Import(ndefRecord.getPayload());
|
|
byte[] bArr = fmnfcdata.m_data;
|
|
Log("NfcMessageReceivedJNI");
|
|
NfcMessageReceivedJNI(bArr, bArr.length);
|
|
} else {
|
|
Log("NdefRecord record was null");
|
|
}
|
|
} else {
|
|
Log("NdefRecord[] records length = 0");
|
|
}
|
|
} else {
|
|
Log("Parcelable parcelableMessage was null");
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
Log("Parcelable[] messages length = 0");
|
|
return;
|
|
}
|
|
Log("Parcelable[] messages was null");
|
|
}
|
|
|
|
public void WriteNfcMessage(Intent intent) {
|
|
Tag tag = (Tag) intent.getParcelableExtra("android.nfc.extra.TAG");
|
|
if (tag != null) {
|
|
fmNfcData fmnfcdata = this.m_fmNfcData;
|
|
if (fmnfcdata != null) {
|
|
WriteTag(this.m_activity, tag, fmnfcdata.GetByteArray());
|
|
} else {
|
|
Log("fmNfcData was null. Skip writing the tag");
|
|
}
|
|
}
|
|
}
|
|
|
|
@TargetApi(16)
|
|
public void WriteTag(Context context, Tag tag, byte[] bArr) {
|
|
NdefMessage ndefMessage = this.m_ndefMessage;
|
|
if (ndefMessage == null) {
|
|
ndefMessage = new NdefMessage(new NdefRecord[]{NdefRecord.createExternal("com.ea.games.r3_na", "r3.data", bArr), NdefRecord.createApplicationRecord(context.getPackageName())});
|
|
}
|
|
Ndef ndef = Ndef.get(tag);
|
|
if (ndef != null) {
|
|
try {
|
|
ndef.connect();
|
|
if (ndef.isWritable()) {
|
|
int length = ndefMessage.toByteArray().length;
|
|
int maxSize = ndef.getMaxSize();
|
|
Log("Message size is (" + length + ")");
|
|
Log("Tag size is (" + maxSize + ")");
|
|
if (maxSize >= length) {
|
|
try {
|
|
try {
|
|
ndef.writeNdefMessage(ndefMessage);
|
|
} catch (FormatException unused) {
|
|
Log("Format exception :(");
|
|
}
|
|
} catch (TagLostException unused2) {
|
|
Log("Tag has been lost :(");
|
|
} catch (IOException unused3) {
|
|
Log("IOException :(");
|
|
}
|
|
} else {
|
|
Log("The message is too big for the tag");
|
|
}
|
|
} else {
|
|
Log("Tag is read only");
|
|
}
|
|
return;
|
|
} catch (Exception unused4) {
|
|
Log("Failed to connect to the tag");
|
|
return;
|
|
}
|
|
}
|
|
NdefFormatable ndefFormatable = NdefFormatable.get(tag);
|
|
if (ndefFormatable != null) {
|
|
try {
|
|
ndefFormatable.connect();
|
|
ndefFormatable.format(ndefMessage);
|
|
} catch (FormatException unused5) {
|
|
Log("Format exception :(");
|
|
} catch (TagLostException unused6) {
|
|
Log("Tag has been lost :(");
|
|
} catch (IOException unused7) {
|
|
Log("IOException :(");
|
|
}
|
|
}
|
|
}
|
|
|
|
public void EnableForegroundDispatch() {
|
|
if (!IsNfcAvailable() || this.m_bForegroundDispatchEnabled) {
|
|
return;
|
|
}
|
|
this.m_activity.runOnUiThread(new Runnable() { // from class: com.firemint.realracing.fmNfcManager.1
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
fmNfcManager.Log("Enable Foreground Dispatch");
|
|
PendingIntent activity = PendingIntent.getActivity(fmNfcManager.this.m_activity, 0, new Intent(fmNfcManager.this.m_activity, (Class<?>) MainActivity.class).addFlags(DriveFile.MODE_WRITE_ONLY), 335544320);
|
|
try {
|
|
new IntentFilter[]{new IntentFilter("android.nfc.action.TAG_DISCOVERED"), new IntentFilter("android.nfc.action.NDEF_DISCOVERED")}[0].addDataType("application/vnd.r3.data");
|
|
} catch (Exception e) {
|
|
fmNfcManager.Log("Failed to add data to intent filter. e = " + e.toString());
|
|
}
|
|
fmNfcManager fmnfcmanager = fmNfcManager.this;
|
|
fmnfcmanager.m_nfcAdapter.enableForegroundDispatch(fmnfcmanager.m_activity, activity, null, null);
|
|
fmNfcManager.this.m_bForegroundDispatchEnabled = true;
|
|
}
|
|
});
|
|
}
|
|
|
|
public void DisableForegroundDispatch() {
|
|
if (IsNfcAvailable() && this.m_bForegroundDispatchEnabled) {
|
|
this.m_activity.runOnUiThread(new Runnable() { // from class: com.firemint.realracing.fmNfcManager.2
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
fmNfcManager.Log("Disable Foreground Dispatch");
|
|
fmNfcManager fmnfcmanager = fmNfcManager.this;
|
|
fmnfcmanager.m_nfcAdapter.disableForegroundDispatch(fmnfcmanager.m_activity);
|
|
fmNfcManager.this.m_bForegroundDispatchEnabled = false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
@TargetApi(16)
|
|
public void SetNfcDataJNI(final byte[] bArr) {
|
|
this.m_activity.runOnUiThread(new Runnable() { // from class: com.firemint.realracing.fmNfcManager.3
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
fmNfcManager.Log("SetNfcDataJNI!");
|
|
fmNfcManager fmnfcmanager = fmNfcManager.this;
|
|
fmnfcmanager.m_ndefMessage = fmnfcmanager.CreateNdefMessage(bArr);
|
|
}
|
|
});
|
|
}
|
|
|
|
public NdefMessage CreateNdefMessage(byte[] bArr) {
|
|
fmNfcData fmnfcdata = new fmNfcData(bArr);
|
|
this.m_fmNfcData = fmnfcdata;
|
|
return new NdefMessage(new NdefRecord[]{NdefRecord.createExternal("com.ea.games.r3_na", "externaltype", fmnfcdata.GetByteArray()), NdefRecord.createApplicationRecord(this.m_activity.getPackageName())});
|
|
}
|
|
|
|
public void SetNfcMode(int i) {
|
|
if (i == 0) {
|
|
Log("Undefined mode!");
|
|
} else if (i == 1) {
|
|
SetNfcMode(NfcMode.NfcMode_Read);
|
|
} else if (i == 2) {
|
|
SetNfcMode(NfcMode.NfcMode_Write);
|
|
}
|
|
}
|
|
}
|