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 @@ + >