package com.wificonnect import android.Manifest import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.net.wifi.WifiManager import android.net.wifi.WifiManager.LocalOnlyHotspotCallback import android.net.wifi.WifiManager.LocalOnlyHotspotReservation import android.os.Build import android.os.Handler import androidx.core.app.ActivityCompat import com.facebook.react.bridge.* class LocalOnlyHotspotModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { private val wifiManager: WifiManager = reactContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager private var mReservation: LocalOnlyHotspotReservation? = null override fun getName(): String { return "LocalOnlyHotspot" } @SuppressLint("MissingPermission") @ReactMethod fun start(res: Promise) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (ActivityCompat.checkSelfPermission( reactContext, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions(currentActivity!!, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION) as Array, 0) } else { wifiManager.startLocalOnlyHotspot(object : LocalOnlyHotspotCallback() { override fun onStarted(reservation: LocalOnlyHotspotReservation) { super.onStarted(reservation) mReservation = reservation res.resolve(config()) } override fun onFailed(reason: Int) { super.onFailed(reason) res.resolve(reason) } }, Handler()) } } } @ReactMethod fun stop(onStop: Promise) { if (mReservation != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mReservation!!.close() onStop.resolve("Stopped") mReservation = null } } else { onStop.resolve("Not Running") } } @ReactMethod fun getConfig(callback: Callback) { callback.invoke(config()) } private fun config(): WritableMap { val resultData: WritableMap = WritableNativeMap() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && mReservation != null) { resultData.putString("ssid", mReservation!!.wifiConfiguration!!.SSID) resultData.putString("pass", mReservation!!.wifiConfiguration!!.preSharedKey) } return resultData } }