import
android.R.attr
import
android.annotation.SuppressLint
import
android.app.StatusBarManager
import
android.content.ComponentName
import
android.content.Context
import
android.content.Intent
import
android.content.pm.PackageManager
import
android.graphics.drawable.Icon
import
android.net.Uri
import
android.net.wifi.WifiManager
import
android.os.Build
import
android.os.Bundle
import
android.provider.MediaStore
import
android.widget.Button
import
android.widget.ImageView
import
android.widget.TextView
import
android.widget.Toast
import
androidx.activity.result.ActivityResultLauncher
import
androidx.activity.result.contract.ActivityResultContracts
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.content.ContextCompat
import
com.google.android.material.dialog.MaterialAlertDialogBuilder
import
java.util.jar.Manifest
class
MainActivity : AppCompatActivity() {
private
lateinit var permissionLauncher: ActivityResultLauncher<String>
private
lateinit var startHotspotBtn: Button
private
lateinit var statusTV: TextView
private
val wifiManager: WifiManager by lazy {
applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
}
@SuppressLint
(
"WrongConstant"
)
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
permissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if
(isGranted) {
startHotSpot()
}
else
{
Toast.makeText(
this
,
"Please allow the Nearby Wi-Fi Devices permission for this app"
,
Toast.LENGTH_LONG,
).show()
}
}
startHotspotBtn = findViewById(R.id.idBtnHotspot)
statusTV = findViewById(R.id.idTVHotspotStatue)
startHotspotBtn.setOnClickListener {
checkPermissions()
}
}
@SuppressLint
(
"InlinedApi"
)
private
fun checkPermissions() {
if
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val permission: String = android.Manifest.permission.NEARBY_WIFI_DEVICES
when {
ContextCompat.checkSelfPermission(
this
, permission,
) == PackageManager.PERMISSION_GRANTED -> {
startHotSpot()
}
shouldShowRequestPermissionRationale(permission) -> {
MaterialAlertDialogBuilder(
this
).setMessage(
"This app would not work without Nearby Wi-Fi Devices permission. Do you want to give this app the permission?"
)
.setPositiveButton(
"Yes"
) { _, _ ->
permissionLauncher.launch(permission)
}.setNegativeButton(
"No Thanks"
) { _, _ ->
}.show()
}
else
-> {
permissionLauncher.launch(permission)
}
}
}
else
{
Toast.makeText(
this
,
"Please use Android 13 device."
,
Toast.LENGTH_SHORT,
).show()
}
}
@SuppressLint
(
"NewApi"
)
private
fun startHotSpot() {
wifiManager.startLocalOnlyHotspot(
object : WifiManager.LocalOnlyHotspotCallback() {
override fun onStarted(reservation: WifiManager.LocalOnlyHotspotReservation?) {
super
.onStarted(reservation)
startHotspotBtn.isEnabled =
false
statusTV.text =
"Status Local Only Hotspot: STARTED"
}
override fun onFailed(reason: Int) {
super
.onFailed(reason)
Toast.makeText(
this
@MainActivity
,
"Error Local Only Hotspot: $reason"
,
Toast.LENGTH_SHORT,
).show()
}
override fun onStopped() {
super
.onStopped()
startHotspotBtn.isEnabled =
true
statusTV.text =
"Status Local Only Hotspot: STOPPED"
}
},
null
,
)
}
}