You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AICEmu/app/src/main/java/moe/tqlwsl/aicemu/SettingActivity.kt

112 lines
4.4 KiB

package moe.tqlwsl.aicemu
import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SwitchCompat
import org.lsposed.hiddenapibypass.HiddenApiBypass
import java.lang.reflect.Method
class SettingActivity : AppCompatActivity() {
private var isHCEFSupported: Boolean = false
private var isHCEFUnlocked: Boolean = false
private var pmmtoolStatus: String? = ""
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<TextView>(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)
}
val textUnlocker = findViewById<TextView>(R.id.unlocker_work_text)
if (isHCEFSupported) {
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)
}
// val textPmmtool = findViewById<TextView>(R.id.pmmtool_work_text)
// pmmtoolStatus = getProperty("tmp.AICEmu.pmmtool");
// if (pmmtoolStatus == "") {
// textPmmtool.setText(R.string.Pmmtool_work_false)
// textPmmtool.setTextColor(Color.RED)
// }
// else if (pmmtoolStatus == "0") {
// textPmmtool.setText(R.string.Pmmtool_work_hook_failed)
// textPmmtool.setTextColor(Color.RED)
// }
// else if (pmmtoolStatus == "1") {
// textPmmtool.setText(R.string.Pmmtool_work_true)
// textPmmtool.setTextColor(Color.GREEN)
// }
val pmmtoolSwitch = findViewById<SwitchCompat>(R.id.pmmtool_switch)
pmmtoolSwitch.setOnCheckedChangeListener { _, isChecked ->
var prefs: SharedPreferences =
applicationContext.getSharedPreferences("AICEmu", Context.MODE_WORLD_READABLE)
val editor = prefs.edit()
editor.putBoolean("loadPmmtool", isChecked)
editor.apply()
Runtime.getRuntime().exec(arrayOf("su", "-c", "kill -9 $(su -c pidof com.android.nfc)"))
}
}
}
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
}
}
@SuppressLint("PrivateApi")
fun getProperty(key: String?): String? {
try {
val c = Class.forName("android.os.SystemProperties")
val set: Method = c.getMethod("get", String::class.java)
return set.invoke(c, key)?.toString()
} catch (e: java.lang.Exception) {
Log.d("AICEmu", "getProperty exception")
e.printStackTrace()
return ""
}
}
}
}