// android/app/src/main/java/com/ordzgames/profile/DeviceCommunicationModule.kt
package com.xxx.xxx // replace your-app-name with your app’s name
import android.content.Context
import android.os.AsyncTask
import android.content.pm.ApplicationInfo
import android.net.Uri
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import android.util.Log
import android.widget.Toast
import android.database.Cursor
import java.io.BufferedReader
import java.io.FileReader
import com.magic.auth.InitUtil
import android.provider.Settings
import com.facebook.react.bridge.*
import kotlin.Throws
import android.os.Vibrator
import android.os.VibrationEffect
import java.io.InputStreamReader
import android.Manifest
import android.content.pm.PackageManager
import androidx.core.app.ActivityCompat
import java.lang.reflect.Method
import androidx.core.content.ContextCompat
class DeviceCommunicationModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
override fun getName(): String {
return "DeviceCommunication"
}
private class ReadTask(
private val context: Context,
private val nodePath: String,
private val promise: Promise
) : AsyncTask<Void?, Void?, String?>() {
@Throws(IOException::class)
override fun doInBackground(vararg voids: Void?): String? {
var inputStream: FileInputStream? = null
return try {
inputStream = FileInputStream(nodePath)
val buffer = ByteArray(inputStream.available())
val bytesRead = inputStream.read(buffer)
if (bytesRead > 0) {
String(buffer, Charsets.UTF_8).trim() // Assuming UTF-8 encoding
} else {
"" // or handle no data case as needed
}
} finally {
inputStream?.close()
}
}
override fun onPostExecute(result: String?) {
if (result != null) {
promise.resolve(result)
} else {
promise.reject("READ_FAILED", "Failed to read device node")
}
}
}
private class WriteTask(
private val context: Context,
private val nodePath: String,
private val data: String,
private val promise: Promise
) : AsyncTask<Void?, Void?, Boolean?>() {
@Throws(IOException::class)
override fun doInBackground(vararg voids: Void?): Boolean {
var outputStream: FileOutputStream? = null
return try {
outputStream = FileOutputStream(nodePath)
outputStream.write(data.toByteArray(Charsets.UTF_8)) // Assuming UTF-8 encoding
true
} finally {
outputStream?.close()
}
}
override fun onPostExecute(result: Boolean?) {
if (result == true) {
promise.resolve("success") // Successful write
} else {
promise.reject("WRITE_FAILED", "Failed to write to device node")
}
}
}
private fun getAddressFromProvider(context: Context): String {
val uri = Uri.parse("content://com.bitboy.info/address")
val cursor = context.contentResolver.query(uri, null, null, null, null)
cursor?.moveToNext()
val address = cursor?.getString(0) ?: ""
cursor?.close()
return address
}
@ReactMethod
fun verifyApp(callback: Callback) {
val ret = InitUtil.getReqParam(reactApplicationContext, "Your App Key")
callback.invoke(ret)
}
@ReactMethod
fun getAddress(callback: Callback) {
val context = reactApplicationContext // Access the ReactApplicationContext here
val address = getAddressFromProvider(context)
callback.invoke(address)
}
}