wip
This commit is contained in:
@@ -29,6 +29,11 @@ import android.content.Intent
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.net.ConnectivityManager
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
import android.app.PendingIntent
|
||||
import android.content.BroadcastReceiver
|
||||
import androidx.core.app.NotificationCompat
|
||||
|
||||
// added by hansonxyz
|
||||
|
||||
@@ -61,35 +66,72 @@ class MyBroadcastReceiver : BroadcastReceiver(), TetheringManager.StartTethering
|
||||
// */
|
||||
// override fun onTetheringFailed(error: Int? = null) { }
|
||||
|
||||
private fun createNotificationChannel(context: Context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
val name = "Tethering Notification"
|
||||
val descriptionText = "Notifications for tethering status"
|
||||
val importance = NotificationManager.IMPORTANCE_DEFAULT
|
||||
val channel = NotificationChannel("TETHERING_STATUS", name, importance).apply {
|
||||
description = descriptionText
|
||||
}
|
||||
val notificationManager: NotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
notificationManager.createNotificationChannel(channel)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showNotification(context: Context, title: String, message: String) {
|
||||
createNotificationChannel(context)
|
||||
|
||||
val notificationBuilder = NotificationCompat.Builder(context, "TETHERING_STATUS")
|
||||
.setSmallIcon(R.drawable.ic_launcher_foreground)
|
||||
.setContentTitle(title)
|
||||
.setContentText(message)
|
||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||
|
||||
val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java)
|
||||
notificationManager?.notify(System.currentTimeMillis().toInt(), notificationBuilder.build())
|
||||
}
|
||||
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
if (intent.action.toString().contains("BT_TETHER_START")) {
|
||||
TetheringManager.startTethering(TetheringManager.TETHERING_BLUETOOTH, false, this)
|
||||
}
|
||||
if (intent.action.toString().contains("BT_TETHER_STOP")) {
|
||||
TetheringManager.stopTethering(TetheringManager.TETHERING_BLUETOOTH)
|
||||
}
|
||||
if (intent.action.toString().contains("WIFI_TETHER_START")) {
|
||||
val config = synchronized(BootReceiver) { BootReceiver.config }
|
||||
if (!(config == null || config.startables.isEmpty())) {
|
||||
for (startable in config.startables.values) startable.start(App.app)
|
||||
when (intent.action) {
|
||||
"BT_TETHER_START" -> {
|
||||
TetheringManager.startTethering(TetheringManager.TETHERING_BLUETOOTH, false, this)
|
||||
}
|
||||
TetheringManager.startTethering(TetheringManager.TETHERING_WIFI, false, this)
|
||||
Toast.makeText(context, "Started tethering", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
if (intent.action.toString().contains("WIFI_TETHER_STOP")) {
|
||||
TetheringManager.stopTethering(TetheringManager.TETHERING_WIFI)
|
||||
}
|
||||
if (intent.action.toString().contains("android.net.conn.TETHER_STATE_CHANGED")) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val tetheredInterfaces = intent.getStringArrayListExtra("tetherArray")
|
||||
Toast.makeText(context, "Tethering interfaces changed", Toast.LENGTH_SHORT).show()
|
||||
tetheredInterfaces?.forEach { iface ->
|
||||
Intent(context, TetheringService::class.java).apply {
|
||||
putExtra(TetheringService.EXTRA_ADD_INTERFACES, arrayOf(iface))
|
||||
context.startForegroundService(this)
|
||||
"BT_TETHER_STOP" -> {
|
||||
TetheringManager.stopTethering(TetheringManager.TETHERING_BLUETOOTH)
|
||||
}
|
||||
"WIFI_TETHER_START" -> {
|
||||
val config = synchronized(BootReceiver) { BootReceiver.config }
|
||||
if (!(config == null || config.startables.isEmpty())) {
|
||||
for (startable in config.startables.values) startable.start(App.app)
|
||||
}
|
||||
TetheringManager.startTethering(TetheringManager.TETHERING_WIFI, false, this)
|
||||
showNotification(context, "Tethering Status", "Wi-Fi tethering started")
|
||||
}
|
||||
"WIFI_TETHER_STOP" -> {
|
||||
TetheringManager.stopTethering(TetheringManager.TETHERING_WIFI)
|
||||
}
|
||||
TetheringManager.ACTION_TETHER_STATE_CHANGED -> {
|
||||
val tetheredInterfaces = intent.getStringArrayListExtra(TetheringManager.EXTRA_ACTIVE_TETHER)
|
||||
val message = if (tetheredInterfaces != null && tetheredInterfaces.isNotEmpty()) {
|
||||
"Tethering interfaces changed. Monitoring service called for ${tetheredInterfaces.joinToString(", ")}"
|
||||
} else {
|
||||
"No active tethering interfaces found"
|
||||
}
|
||||
showNotification(context, "Tethering Status", message)
|
||||
if (tetheredInterfaces != null && tetheredInterfaces.isNotEmpty()) {
|
||||
Toast.makeText(context, "Tethering interfaces changed", Toast.LENGTH_SHORT).show()
|
||||
tetheredInterfaces.forEach { iface ->
|
||||
Intent(context, TetheringService::class.java).apply {
|
||||
putExtra(TetheringService.EXTRA_ADD_INTERFACES, arrayOf(iface))
|
||||
context.startForegroundService(this)
|
||||
}
|
||||
Toast.makeText(context, "Monitoring service called for $iface", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(context, "No active tethering interfaces found", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
Toast.makeText(context, "Monitoring service called for $iface", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ object TetheringManager {
|
||||
* gives a String[] listing all the interfaces currently tethered
|
||||
* (ie, has DHCPv4 support and packets potentially forwarded/NATed)
|
||||
*/
|
||||
private const val EXTRA_ACTIVE_TETHER = "tetherArray"
|
||||
public const val EXTRA_ACTIVE_TETHER = "tetherArray"
|
||||
/**
|
||||
* gives a String[] listing all the interfaces we tried to tether and
|
||||
* failed. Use [getLastTetherError] to find the error code
|
||||
|
||||
Reference in New Issue
Block a user