diff --git a/app/build.gradle b/app/build.gradle
index 03fac8a..b28183d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,9 +42,11 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
+ implementation 'androidx.preference:preference:1.2.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.google.code.gson:gson:2.8.9'
compileOnly 'de.robv.android.xposed:api:82'
+ implementation 'org.lsposed.hiddenapibypass:hiddenapibypass:4.3'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 028419f..8062d6e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,11 +1,12 @@
+ xmlns:tools="http://schemas.android.com/tools" >
+ tools:targetApi="31" >
+
+
+
+
+
-
+ android:theme="@style/Theme.AICEmu" >
-
-
+
+
+ android:permission="android.permission.BIND_NFC_SERVICE" >
@@ -43,16 +61,5 @@
android:resource="@xml/host_nfcf_service" />
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt b/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt
index 7083a76..879ba36 100644
--- a/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt
+++ b/app/src/main/java/moe/tqlwsl/aicemu/GlobalVar.kt
@@ -4,4 +4,5 @@ import android.app.Application
class GlobalVar : Application() {
var IDm: String = "02fe000000000000"
+ var isHCEFUnlocked: Boolean = false
}
\ No newline at end of file
diff --git a/app/src/main/java/moe/tqlwsl/aicemu/MainActivity.kt b/app/src/main/java/moe/tqlwsl/aicemu/MainActivity.kt
index 952f3f2..a7c2178 100644
--- a/app/src/main/java/moe/tqlwsl/aicemu/MainActivity.kt
+++ b/app/src/main/java/moe/tqlwsl/aicemu/MainActivity.kt
@@ -148,7 +148,8 @@ class MainActivity : AppCompatActivity() {
}
R.id.toolbar_menu_settings -> {
Toast.makeText(applicationContext, "还没做()\nUnder constuction...", Toast.LENGTH_LONG).show()
- // TODO
+ val settingIntent = Intent(this, SettingActivity::class.java)
+ startActivity(settingIntent)
true
}
else -> super.onOptionsItemSelected(item)
@@ -239,6 +240,7 @@ class MainActivity : AppCompatActivity() {
setIDm(globalVar.IDm)
}
val resultSys = setSys("88B4") // hardcoded syscode for sbga
+ globalVar.isHCEFUnlocked = resultSys
val cardNameTextView = cardView.findViewById(R.id.card_name)
val cardName = cardNameTextView.text
diff --git a/app/src/main/java/moe/tqlwsl/aicemu/SettingActivity.kt b/app/src/main/java/moe/tqlwsl/aicemu/SettingActivity.kt
new file mode 100644
index 0000000..dfb8c1f
--- /dev/null
+++ b/app/src/main/java/moe/tqlwsl/aicemu/SettingActivity.kt
@@ -0,0 +1,67 @@
+package moe.tqlwsl.aicemu
+
+import android.annotation.SuppressLint
+import android.content.pm.PackageManager
+import android.graphics.Color
+import android.os.Build
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.TextView
+import org.lsposed.hiddenapibypass.HiddenApiBypass
+
+class SettingActivity : AppCompatActivity() {
+ private var isHCEFSupported: Boolean = false
+ private var isHCEFUnlocked: Boolean = false
+ val TAG: String = "AICEmu"
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_setting)
+
+ isHCEFSupported =
+ packageManager.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION_NFCF)
+ Log.d(TAG, "isHCEFSupported:$isHCEFSupported")
+
+ val textHCEF = findViewById(R.id.hcef_support_text)
+ if (isHCEFSupported) {
+ textHCEF.setText(R.string.HCEF_support_true)
+ textHCEF.setTextColor(Color.GREEN)
+ } else {
+ textHCEF.setText(R.string.HCEF_support_false)
+ textHCEF.setTextColor(Color.RED)
+ }
+
+ if (isHCEFSupported) {
+ val textUnlocker = findViewById(R.id.unlocker_work_text)
+ try {
+ val globalVar = this.applicationContext as GlobalVar
+ isHCEFUnlocked = globalVar.isHCEFUnlocked
+ Log.d(TAG, "isHCEFUnlocked:$isHCEFUnlocked")
+ if (isHCEFUnlocked) {
+ textUnlocker.setText(R.string.Unlocker_work_true)
+ textUnlocker.setTextColor(Color.GREEN)
+ } else {
+ textUnlocker.setText(R.string.Unlocker_work_false)
+ textUnlocker.setTextColor(Color.RED)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ textUnlocker.setText(R.string.Unlocker_work_error)
+ }
+ }
+ }
+
+ companion object {
+ @SuppressLint("SoonBlockedPrivateApi")
+ private fun isValidSystemCode(systemCode: String): Boolean {
+ val clazz = Class.forName("android.nfc.cardemulation.NfcFCardEmulation")
+ return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
+ val method = clazz.getDeclaredMethod("isValidSystemCode", String::class.java)
+ method.invoke(null, systemCode) as Boolean
+ } else {
+ HiddenApiBypass.invoke(clazz, null, "isValidSystemCode", systemCode) as Boolean
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/moe/tqlwsl/aicemu/xp.java b/app/src/main/java/moe/tqlwsl/aicemu/xp.java
index c938d58..10ab1dd 100644
--- a/app/src/main/java/moe/tqlwsl/aicemu/xp.java
+++ b/app/src/main/java/moe/tqlwsl/aicemu/xp.java
@@ -73,7 +73,7 @@ public class xp implements IXposedHookLoadPackage {
}
});
- XposedBridge.log("Hook successed!!!");
+ XposedBridge.log("Hook succeeded!!!");
}
}
}
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
new file mode 100644
index 0000000..2597402
--- /dev/null
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index c39eaae..70ccec6 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -2,10 +2,9 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index cbce90b..5ee142b 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -1,7 +1,7 @@
设置
AIC Card
- 请与AIC卡贴贴!
+ 请与 AIC 卡贴贴!
改名
删除
展示卡号
@@ -11,4 +11,10 @@
关闭兼容模式
NFC 没开...
设备不支持 NFC...
+ 设置
+ 设备不支持 HCE-F...
+ 设备支持 HCE-F!
+ Unlocker 运行中!
+ Unlocker 没在工作...
+ Unlocker 出错了!
\ No newline at end of file
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
new file mode 100644
index 0000000..bc2b90f
--- /dev/null
+++ b/app/src/main/res/values/array.xml
@@ -0,0 +1,6 @@
+
+
+
+ - com.android.nfc
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 97d1dcf..e23152a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,5 +2,7 @@
#FF000000
#FFFFFFFF
+ #e83948
+ #98030d
#e86871
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 412f80d..739e5d9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,4 +17,10 @@
edit card
close
EmuCard
+ Setting
+ HCE-F not supported...
+ HCE-F is supported!
+ Unlocker is working!
+ Unlocker not working...
+ Unlocker Error!
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 4cd3ae0..49c0755 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,11 +2,16 @@
+ >
\ No newline at end of file