Compare commits
10 Commits
0b87e1461f
...
74ff304e40
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74ff304e40 | ||
|
|
5cfcd2c3c7 | ||
|
|
cdf6094579 | ||
|
|
a21f3c307e | ||
|
|
bba6336b6c | ||
|
|
5766919216 | ||
|
|
82b2fd4e93 | ||
|
|
c72b4c4f27 | ||
|
|
26fbbc36e5 | ||
|
|
10565bcba7 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@
|
|||||||
/build
|
/build
|
||||||
/captures
|
/captures
|
||||||
.externalNativeBuild
|
.externalNativeBuild
|
||||||
|
release/vpnhotspotmod.apk
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -1,3 +1,23 @@
|
|||||||
|
# VPN Hotspot MOD
|
||||||
|
|
||||||
|
This is a modification of Mygod/VPNHotspot which allows bluetooth and wifi hotspots to be started automatically via intent. All interfaces are set to monitor when the hotspot is started.
|
||||||
|
|
||||||
|
To start the hotspot via tasker, create a new action to send an intent. Into the settings put:
|
||||||
|
|
||||||
|
Action: hanson.xyz.vpnhotspotmod.WIFI_TETHER_START
|
||||||
|
Package: hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
|
To stop:
|
||||||
|
|
||||||
|
Action: hanson.xyz.vpnhotspotmod.WIFI_TETHER_STOP
|
||||||
|
Package: hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
|
Intents BLUETOOTH_TETHER_START and BLUETOOTH_TETHER_STOP are also available.
|
||||||
|
|
||||||
|
This has been tested and developed on Android 13, on a Pixel 7, in June 2023.
|
||||||
|
|
||||||
|
Original README.md follows:
|
||||||
|
|
||||||
# VPN Hotspot
|
# VPN Hotspot
|
||||||
|
|
||||||
[](https://circleci.com/gh/Mygod/VPNHotspot)
|
[](https://circleci.com/gh/Mygod/VPNHotspot)
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("com.android.application") version "8.2.0-alpha07" apply false
|
id("com.android.application") version "8.2.0" apply false
|
||||||
id("com.github.ben-manes.versions") version "0.46.0"
|
id("com.github.ben-manes.versions") version "0.49.0"
|
||||||
id("org.jetbrains.kotlin.android") version "1.8.21" apply false
|
id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false
|
||||||
|
id("org.jetbrains.kotlin.android") version "1.9.10" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath("com.google.firebase:firebase-crashlytics-gradle:2.9.5")
|
classpath("com.google.firebase:firebase-crashlytics-gradle:2.9.9")
|
||||||
classpath("com.google.android.gms:oss-licenses-plugin:0.10.6")
|
classpath("com.google.android.gms:oss-licenses-plugin:0.10.6")
|
||||||
classpath("com.google.gms:google-services:4.3.15")
|
classpath("com.google.gms:google-services:4.4.0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
3
gradle/wrapper/gradle-wrapper.properties
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,7 @@
|
|||||||
|
#Thu Dec 21 01:34:39 CST 2023
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-rc-2-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "be.mygod.vpnhotspot"
|
namespace = "hanson.xyz.vpnhotspotmod"
|
||||||
|
|
||||||
val javaVersion = 11
|
val javaVersion = 11
|
||||||
buildToolsVersion = "34.0.0"
|
buildToolsVersion = "34.0.0"
|
||||||
@@ -24,18 +24,18 @@ android {
|
|||||||
}
|
}
|
||||||
compileSdk = 34
|
compileSdk = 34
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "be.mygod.vpnhotspot"
|
|
||||||
minSdk = 28
|
minSdk = 28
|
||||||
targetSdk = 33
|
targetSdk = 33
|
||||||
resourceConfigurations.addAll(arrayOf("it", "pt-rBR", "ru", "zh-rCN", "zh-rTW"))
|
resourceConfigurations.addAll(arrayOf("it", "pt-rBR", "ru", "zh-rCN", "zh-rTW"))
|
||||||
versionCode = 1004
|
versionCode = 1005
|
||||||
versionName = "2.16.4"
|
versionName = "2.16.5"
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
javaCompileOptions.annotationProcessorOptions.arguments.apply {
|
javaCompileOptions.annotationProcessorOptions.arguments.apply {
|
||||||
put("room.expandProjection", "true")
|
put("room.expandProjection", "true")
|
||||||
put("room.incremental", "true")
|
put("room.incremental", "true")
|
||||||
put("room.schemaLocation", "$projectDir/schemas")
|
put("room.schemaLocation", "$projectDir/schemas")
|
||||||
}
|
}
|
||||||
|
applicationId = "hanson.xyz.vpnhotspotmod"
|
||||||
}
|
}
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
@@ -71,34 +71,34 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
val lifecycleVersion = "2.6.1"
|
val lifecycleVersion = "2.6.2"
|
||||||
val roomVersion = "2.5.1"
|
val roomVersion = "2.6.1"
|
||||||
|
|
||||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3")
|
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
|
||||||
kapt("androidx.room:room-compiler:$roomVersion")
|
kapt("androidx.room:room-compiler:$roomVersion")
|
||||||
implementation(kotlin("stdlib-jdk8"))
|
implementation(kotlin("stdlib-jdk8"))
|
||||||
implementation("androidx.browser:browser:1.5.0")
|
implementation("androidx.browser:browser:1.7.0")
|
||||||
implementation("androidx.core:core-ktx:1.11.0-beta02")
|
implementation("androidx.core:core-ktx:1.12.0")
|
||||||
implementation("androidx.fragment:fragment-ktx:1.6.0")
|
implementation("androidx.fragment:fragment-ktx:1.6.2")
|
||||||
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion")
|
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion")
|
||||||
implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion")
|
implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion")
|
||||||
implementation("androidx.preference:preference:1.2.0")
|
implementation("androidx.preference:preference:1.2.1")
|
||||||
implementation("androidx.room:room-ktx:$roomVersion")
|
implementation("androidx.room:room-ktx:$roomVersion")
|
||||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
||||||
implementation("be.mygod.librootkotlinx:librootkotlinx:1.0.4")
|
implementation("be.mygod.librootkotlinx:librootkotlinx:1.1.1")
|
||||||
implementation("com.android.billingclient:billing-ktx:6.0.0")
|
implementation("com.android.billingclient:billing-ktx:6.1.0")
|
||||||
implementation("com.github.tiann:FreeReflection:3.1.0")
|
|
||||||
implementation("com.google.android.gms:play-services-base:18.2.0") // fix for GoogleApiActivity crash @ 18.1.0+
|
implementation("com.google.android.gms:play-services-base:18.2.0") // fix for GoogleApiActivity crash @ 18.1.0+
|
||||||
implementation("com.google.android.gms:play-services-oss-licenses:17.0.1")
|
implementation("com.google.android.gms:play-services-oss-licenses:17.0.1")
|
||||||
implementation("com.google.android.material:material:1.9.0")
|
implementation("com.google.android.material:material:1.11.0")
|
||||||
implementation("com.google.firebase:firebase-analytics-ktx:21.3.0")
|
implementation("com.google.firebase:firebase-analytics-ktx:21.5.0")
|
||||||
implementation("com.google.firebase:firebase-crashlytics:18.3.7")
|
implementation("com.google.firebase:firebase-crashlytics:18.6.0")
|
||||||
implementation("com.google.zxing:core:3.5.1")
|
implementation("com.google.zxing:core:3.5.2")
|
||||||
implementation("com.jakewharton.timber:timber:5.0.1")
|
implementation("com.jakewharton.timber:timber:5.0.1")
|
||||||
implementation("com.linkedin.dexmaker:dexmaker:2.28.3")
|
implementation("com.linkedin.dexmaker:dexmaker:2.28.3")
|
||||||
implementation("com.takisoft.preferencex:preferencex-simplemenu:1.1.0")
|
implementation("com.takisoft.preferencex:preferencex-simplemenu:1.1.0")
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5")
|
implementation("org.lsposed.hiddenapibypass:hiddenapibypass:4.3")
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1")
|
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7")
|
||||||
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
|
||||||
add("googleImplementation", "com.google.android.play:app-update-ktx:2.1.0")
|
add("googleImplementation", "com.google.android.play:app-update-ktx:2.1.0")
|
||||||
testImplementation("junit:junit:4.13.2")
|
testImplementation("junit:junit:4.13.2")
|
||||||
androidTestImplementation("androidx.room:room-testing:$roomVersion")
|
androidTestImplementation("androidx.room:room-testing:$roomVersion")
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"client_info": {
|
"client_info": {
|
||||||
"mobilesdk_app_id": "1:13108846109:android:63120dcb2e900ed0",
|
"mobilesdk_app_id": "1:13108846109:android:63120dcb2e900ed0",
|
||||||
"android_client_info": {
|
"android_client_info": {
|
||||||
"package_name": "be.mygod.vpnhotspot"
|
"package_name": "hanson.xyz.vpnhotspotmod"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"oauth_client": [
|
"oauth_client": [
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.room
|
package hanson.xyz.vpnhotspotmod.room
|
||||||
|
|
||||||
import androidx.room.testing.MigrationTestHelper
|
import androidx.room.testing.MigrationTestHelper
|
||||||
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
|
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.BuildConfig
|
import hanson.xyz.vpnhotspotmod.BuildConfig
|
||||||
import kotlinx.coroutines.currentCoroutineContext
|
import kotlinx.coroutines.currentCoroutineContext
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.ensureActive
|
import kotlinx.coroutines.ensureActive
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import com.google.android.play.core.appupdate.AppUpdateManagerFactory
|
import com.google.android.play.core.appupdate.AppUpdateManagerFactory
|
||||||
import com.google.android.play.core.install.InstallException
|
import com.google.android.play.core.install.InstallException
|
||||||
import com.google.android.play.core.install.model.InstallErrorCode
|
import com.google.android.play.core.install.model.InstallErrorCode
|
||||||
@@ -23,7 +23,7 @@ object UpdateChecker {
|
|||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.w(e)
|
Timber.w(e)
|
||||||
app.customTabsIntent.launchUrl(activity,
|
app.customTabsIntent.launchUrl(activity,
|
||||||
Uri.parse("https://play.google.com/store/apps/details?id=be.mygod.vpnhotspot"))
|
Uri.parse("https://play.google.com/store/apps/details?id=hanson.xyz.vpnhotspotmod"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private class UpdateDownloading(private val update: AppUpdateResult.InProgress) : AppUpdate {
|
private class UpdateDownloading(private val update: AppUpdateResult.InProgress) : AppUpdate {
|
||||||
@@ -32,6 +32,7 @@
|
|||||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS"
|
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS"
|
||||||
tools:ignore="ProtectedPermissions" />
|
tools:ignore="ProtectedPermissions" />
|
||||||
@@ -102,11 +103,13 @@
|
|||||||
<service
|
<service
|
||||||
android:name=".LocalOnlyHotspotService"
|
android:name=".LocalOnlyHotspotService"
|
||||||
android:directBootAware="true"
|
android:directBootAware="true"
|
||||||
android:foregroundServiceType="location|connectedDevice"/>
|
android:foregroundServiceType="location|connectedDevice"
|
||||||
|
tools:ignore="ForegroundServicePermission"/>
|
||||||
<service
|
<service
|
||||||
android:name=".RepeaterService"
|
android:name=".RepeaterService"
|
||||||
android:directBootAware="true"
|
android:directBootAware="true"
|
||||||
android:foregroundServiceType="location|connectedDevice"/>
|
android:foregroundServiceType="location|connectedDevice"
|
||||||
|
tools:ignore="ForegroundServicePermission"/>
|
||||||
<service
|
<service
|
||||||
android:name=".TetheringService"
|
android:name=".TetheringService"
|
||||||
android:directBootAware="true"
|
android:directBootAware="true"
|
||||||
@@ -211,9 +214,18 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="hanson.xyz.vpnhotspotmod.WIFI_TETHER_START" />
|
||||||
|
<action android:name="hanson.xyz.vpnhotspotmod.WIFI_TETHER_STOP" />
|
||||||
|
<action android:name="hanson.xyz.vpnhotspotmod.BT_TETHER_START" />
|
||||||
|
<action android:name="hanson.xyz.vpnhotspotmod.BT_TETHER_STOP" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name="androidx.core.content.FileProvider"
|
android:name="androidx.core.content.FileProvider"
|
||||||
android:authorities="be.mygod.vpnhotspot.log"
|
android:authorities="hanson.xyz.vpnhotspotmod.log"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:grantUriPermissions="true">
|
android:grantUriPermissions="true">
|
||||||
<meta-data
|
<meta-data
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
@@ -18,12 +18,12 @@ import androidx.browser.customtabs.CustomTabsIntent
|
|||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import be.mygod.librootkotlinx.NoShellException
|
import be.mygod.librootkotlinx.NoShellException
|
||||||
import be.mygod.vpnhotspot.net.DhcpWorkaround
|
import hanson.xyz.vpnhotspotmod.net.DhcpWorkaround
|
||||||
import be.mygod.vpnhotspot.room.AppDatabase
|
import hanson.xyz.vpnhotspotmod.room.AppDatabase
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.util.DeviceStorageApp
|
import hanson.xyz.vpnhotspotmod.util.DeviceStorageApp
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import com.google.firebase.analytics.ktx.ParametersBuilder
|
import com.google.firebase.analytics.ktx.ParametersBuilder
|
||||||
import com.google.firebase.analytics.ktx.analytics
|
import com.google.firebase.analytics.ktx.analytics
|
||||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
@@ -8,7 +8,7 @@ import android.content.pm.PackageManager
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import be.mygod.librootkotlinx.toByteArray
|
import be.mygod.librootkotlinx.toByteArray
|
||||||
import be.mygod.librootkotlinx.toParcelable
|
import be.mygod.librootkotlinx.toParcelable
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.DataInputStream
|
import java.io.DataInputStream
|
||||||
@@ -29,12 +29,7 @@ class BootReceiver : BroadcastReceiver() {
|
|||||||
else PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
|
else PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
|
||||||
private val userEnabled get() = app.pref.getBoolean(KEY, false)
|
private val userEnabled get() = app.pref.getBoolean(KEY, false)
|
||||||
fun onUserSettingUpdated(shouldStart: Boolean) {
|
fun onUserSettingUpdated(shouldStart: Boolean) {
|
||||||
enabled = shouldStart && try {
|
enabled = shouldStart && config?.startables?.isEmpty() == false
|
||||||
config
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Timber.w(e)
|
|
||||||
null
|
|
||||||
}?.startables?.isEmpty() == false
|
|
||||||
}
|
}
|
||||||
private fun onConfigUpdated(isNotEmpty: Boolean) {
|
private fun onConfigUpdated(isNotEmpty: Boolean) {
|
||||||
enabled = isNotEmpty && userEnabled
|
enabled = isNotEmpty && userEnabled
|
||||||
@@ -46,14 +41,12 @@ class BootReceiver : BroadcastReceiver() {
|
|||||||
DataInputStream(configFile.inputStream()).use { it.readBytes().toParcelable() }
|
DataInputStream(configFile.inputStream()).use { it.readBytes().toParcelable() }
|
||||||
} catch (_: FileNotFoundException) {
|
} catch (_: FileNotFoundException) {
|
||||||
null
|
null
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Timber.d("Boot config corrupted", e)
|
||||||
|
null
|
||||||
}
|
}
|
||||||
private fun updateConfig(work: Config.() -> Unit) = synchronized(BootReceiver) {
|
private fun updateConfig(work: Config.() -> Unit) = synchronized(BootReceiver) {
|
||||||
val config = try {
|
val config = config ?: Config()
|
||||||
config
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Timber.i("Boot config corrupted", e)
|
|
||||||
null
|
|
||||||
} ?: Config()
|
|
||||||
config.work()
|
config.work()
|
||||||
DataOutputStream(configFile.outputStream()).use { it.write(config.toByteArray()) }
|
DataOutputStream(configFile.outputStream()).use { it.write(config.toByteArray()) }
|
||||||
config
|
config
|
||||||
@@ -85,12 +78,7 @@ class BootReceiver : BroadcastReceiver() {
|
|||||||
private var started = false
|
private var started = false
|
||||||
private fun startIfNecessary() {
|
private fun startIfNecessary() {
|
||||||
if (started) return
|
if (started) return
|
||||||
val config = try {
|
val config = synchronized(BootReceiver) { config }
|
||||||
synchronized(BootReceiver) { config }
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Timber.w(e)
|
|
||||||
null
|
|
||||||
}
|
|
||||||
if (config == null || config.startables.isEmpty()) {
|
if (config == null || config.startables.isEmpty()) {
|
||||||
enabled = false
|
enabled = false
|
||||||
} else for (startable in config.startables.values) startable.start(app)
|
} else for (startable in config.startables.values) startable.start(app)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
@@ -7,10 +7,10 @@ import android.view.ViewGroup
|
|||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import androidx.appcompat.app.AppCompatDialogFragment
|
import androidx.appcompat.app.AppCompatDialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.databinding.FragmentEbegBinding
|
import hanson.xyz.vpnhotspotmod.databinding.FragmentEbegBinding
|
||||||
import be.mygod.vpnhotspot.util.launchUrl
|
import hanson.xyz.vpnhotspotmod.util.launchUrl
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import com.android.billingclient.api.BillingClient
|
import com.android.billingclient.api.BillingClient
|
||||||
import com.android.billingclient.api.BillingClientStateListener
|
import com.android.billingclient.api.BillingClientStateListener
|
||||||
import com.android.billingclient.api.BillingFlowParams
|
import com.android.billingclient.api.BillingFlowParams
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import java.net.Inet4Address
|
import java.net.Inet4Address
|
||||||
|
|
||||||
abstract class IpNeighbourMonitoringService : Service(), IpNeighbourMonitor.Callback {
|
abstract class IpNeighbourMonitoringService : Service(), IpNeighbourMonitor.Callback {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -7,21 +7,21 @@ import android.net.wifi.WifiManager
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.librootkotlinx.RootServer
|
import be.mygod.librootkotlinx.RootServer
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.TetherTimeoutMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.TetherTimeoutMonitor
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat.Companion.toCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat.Companion.toCompat
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager.wifiApState
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager.wifiApState
|
||||||
import be.mygod.vpnhotspot.root.LocalOnlyHotspotCallbacks
|
import hanson.xyz.vpnhotspotmod.root.LocalOnlyHotspotCallbacks
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.root.WifiApCommands
|
import hanson.xyz.vpnhotspotmod.root.WifiApCommands
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.StickyEvent1
|
import hanson.xyz.vpnhotspotmod.util.StickyEvent1
|
||||||
import be.mygod.vpnhotspot.util.broadcastReceiver
|
import hanson.xyz.vpnhotspotmod.util.broadcastReceiver
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
@@ -12,17 +12,17 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import be.mygod.vpnhotspot.client.ClientViewModel
|
import hanson.xyz.vpnhotspotmod.client.ClientViewModel
|
||||||
import be.mygod.vpnhotspot.client.ClientsFragment
|
import hanson.xyz.vpnhotspotmod.client.ClientsFragment
|
||||||
import be.mygod.vpnhotspot.databinding.ActivityMainBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ActivityMainBinding
|
||||||
import be.mygod.vpnhotspot.manage.TetheringFragment
|
import hanson.xyz.vpnhotspotmod.manage.TetheringFragment
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiDoubleLock
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiDoubleLock
|
||||||
import be.mygod.vpnhotspot.util.AppUpdate
|
import hanson.xyz.vpnhotspotmod.util.AppUpdate
|
||||||
import be.mygod.vpnhotspot.util.ServiceForegroundConnector
|
import hanson.xyz.vpnhotspotmod.util.ServiceForegroundConnector
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.UpdateChecker
|
import hanson.xyz.vpnhotspotmod.util.UpdateChecker
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import com.google.android.material.badge.BadgeDrawable
|
import com.google.android.material.badge.BadgeDrawable
|
||||||
import com.google.android.material.navigation.NavigationBarView
|
import com.google.android.material.navigation.NavigationBarView
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothManager
|
||||||
|
import android.content.*
|
||||||
|
import android.graphics.drawable.Icon
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.IBinder
|
||||||
|
import android.service.quicksettings.Tile
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.content.getSystemService
|
||||||
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
|
import hanson.xyz.vpnhotspotmod.TetheringService
|
||||||
|
import hanson.xyz.vpnhotspotmod.manage.BluetoothTethering
|
||||||
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager.tetheredIfaces
|
||||||
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
|
import hanson.xyz.vpnhotspotmod.util.broadcastReceiver
|
||||||
|
import hanson.xyz.vpnhotspotmod.util.readableMessage
|
||||||
|
import hanson.xyz.vpnhotspotmod.util.stopAndUnbind
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import timber.log.Timber
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
|
|
||||||
|
// added by hansonxyz
|
||||||
|
|
||||||
|
class MyBroadcastReceiver : BroadcastReceiver(), TetheringManager.StartTetheringCallback {
|
||||||
|
|
||||||
|
private val handler = Handler(Looper.getMainLooper())
|
||||||
|
|
||||||
|
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")) {
|
||||||
|
TetheringManager.startTethering(TetheringManager.TETHERING_WIFI, false, this)
|
||||||
|
}
|
||||||
|
if (intent.action.toString().contains("WIFI_TETHER_STOP")) {
|
||||||
|
TetheringManager.stopTethering(TetheringManager.TETHERING_WIFI)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
@@ -18,27 +18,27 @@ import android.provider.Settings
|
|||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat.Companion.toLong
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat.Companion.toLong
|
||||||
import be.mygod.vpnhotspot.net.monitor.TetherTimeoutMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.TetherTimeoutMonitor
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat
|
||||||
import be.mygod.vpnhotspot.net.wifi.VendorElements
|
import hanson.xyz.vpnhotspotmod.net.wifi.VendorElements
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.deletePersistentGroup
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.deletePersistentGroup
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestConnectionInfo
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestConnectionInfo
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestDeviceAddress
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestDeviceAddress
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestGroupInfo
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestGroupInfo
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestP2pState
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestP2pState
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestPersistentGroupInfo
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestPersistentGroupInfo
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.setVendorElements
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.setVendorElements
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.setWifiP2pChannels
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.setWifiP2pChannels
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.startWps
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.startWps
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiSsidCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiSsidCompat
|
||||||
import be.mygod.vpnhotspot.root.RepeaterCommands
|
import hanson.xyz.vpnhotspotmod.root.RepeaterCommands
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.util.*
|
import hanson.xyz.vpnhotspotmod.util.*
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.Routing
|
import hanson.xyz.vpnhotspotmod.net.Routing
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiDoubleLock
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiDoubleLock
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.app.*
|
import android.app.*
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.pm.ServiceInfo
|
||||||
|
import android.os.Build
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object ServiceNotification {
|
object ServiceNotification {
|
||||||
@@ -53,7 +55,10 @@ object ServiceNotification {
|
|||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
deviceCountsMap[service] = deviceCounts
|
deviceCountsMap[service] = deviceCounts
|
||||||
if (inactive.isEmpty()) inactiveMap.remove(service) else inactiveMap[service] = inactive
|
if (inactive.isEmpty()) inactiveMap.remove(service) else inactiveMap[service] = inactive
|
||||||
service.startForeground(NOTIFICATION_ID, buildNotification(service))
|
if (Build.VERSION.SDK_INT >= 33) {
|
||||||
|
service.startForeground(NOTIFICATION_ID, buildNotification(service),
|
||||||
|
ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE)
|
||||||
|
} else service.startForeground(NOTIFICATION_ID, buildNotification(service))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fun stopForeground(service: Service) = synchronized(this) {
|
fun stopForeground(service: Service) = synchronized(this) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
@@ -8,21 +8,21 @@ import androidx.lifecycle.lifecycleScope
|
|||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import androidx.preference.TwoStatePreference
|
import androidx.preference.TwoStatePreference
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.TetherOffloadManager
|
import hanson.xyz.vpnhotspotmod.net.TetherOffloadManager
|
||||||
import be.mygod.vpnhotspot.net.monitor.FallbackUpstreamMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.FallbackUpstreamMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.UpstreamMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.UpstreamMonitor
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiDoubleLock
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiDoubleLock
|
||||||
import be.mygod.vpnhotspot.preference.AutoCompleteNetworkPreferenceDialogFragment
|
import hanson.xyz.vpnhotspotmod.preference.AutoCompleteNetworkPreferenceDialogFragment
|
||||||
import be.mygod.vpnhotspot.preference.SharedPreferenceDataStore
|
import hanson.xyz.vpnhotspotmod.preference.SharedPreferenceDataStore
|
||||||
import be.mygod.vpnhotspot.preference.SummaryFallbackProvider
|
import hanson.xyz.vpnhotspotmod.preference.SummaryFallbackProvider
|
||||||
import be.mygod.vpnhotspot.root.Dump
|
import hanson.xyz.vpnhotspotmod.root.Dump
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.launchUrl
|
import hanson.xyz.vpnhotspotmod.util.launchUrl
|
||||||
import be.mygod.vpnhotspot.util.showAllowingStateLoss
|
import hanson.xyz.vpnhotspotmod.util.showAllowingStateLoss
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
|
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
@@ -120,7 +120,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() {
|
|||||||
.setType("text/x-log")
|
.setType("text/x-log")
|
||||||
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||||
.putExtra(Intent.EXTRA_STREAM,
|
.putExtra(Intent.EXTRA_STREAM,
|
||||||
FileProvider.getUriForFile(context, "be.mygod.vpnhotspot.log", logFile)),
|
FileProvider.getUriForFile(context, "hanson.xyz.vpnhotspotmod.log", logFile)),
|
||||||
context.getString(androidx.appcompat.R.string.abc_shareactionprovider_share_with)))
|
context.getString(androidx.appcompat.R.string.abc_shareactionprovider_share_with)))
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
@@ -1,14 +1,16 @@
|
|||||||
package be.mygod.vpnhotspot
|
package hanson.xyz.vpnhotspotmod
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.Routing
|
import hanson.xyz.vpnhotspotmod.net.Routing
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import be.mygod.vpnhotspot.util.Event0
|
import hanson.xyz.vpnhotspotmod.util.Event0
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -24,14 +26,15 @@ class TetheringService : IpNeighbourMonitoringService(), TetheringManager.Tether
|
|||||||
|
|
||||||
inner class Binder : android.os.Binder() {
|
inner class Binder : android.os.Binder() {
|
||||||
val routingsChanged = Event0()
|
val routingsChanged = Event0()
|
||||||
val monitoredIfaces get() = downstreams.values.filter { it.monitor }.map { it.downstream }
|
val monitoredIfaces get() = downstreams.values.map { it.downstream }
|
||||||
|
|
||||||
fun isActive(iface: String) = downstreams.containsKey(iface)
|
fun isActive(iface: String) = downstreams.containsKey(iface)
|
||||||
fun isInactive(iface: String) = downstreams[iface]?.run { !started && monitor }
|
fun isInactive(iface: String) = downstreams[iface]?.run { !started && monitor }
|
||||||
fun monitored(iface: String) = downstreams[iface]?.monitor
|
fun monitored(iface: String) = downstreams[iface]?.monitor
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Downstream(caller: Any, downstream: String, var monitor: Boolean = false) :
|
// hansonxyz - changed monitor default to true
|
||||||
|
private class Downstream(caller: Any, downstream: String, var monitor: Boolean = true) :
|
||||||
RoutingManager(caller, downstream) {
|
RoutingManager(caller, downstream) {
|
||||||
override fun Routing.configure() {
|
override fun Routing.configure() {
|
||||||
forward()
|
forward()
|
||||||
@@ -133,7 +136,7 @@ class TetheringService : IpNeighbourMonitoringService(), TetheringManager.Tether
|
|||||||
onDownstreamsChangedLocked()
|
onDownstreamsChangedLocked()
|
||||||
} else if (downstreams.isEmpty()) stopSelf(startId)
|
} else if (downstreams.isEmpty()) stopSelf(startId)
|
||||||
}
|
}
|
||||||
return START_NOT_STICKY
|
return START_STICKY //hansonxyz changed to sticky
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.client
|
package hanson.xyz.vpnhotspotmod.client
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.text.SpannableStringBuilder
|
import android.text.SpannableStringBuilder
|
||||||
@@ -6,15 +6,15 @@ import android.text.Spanned
|
|||||||
import android.text.style.StrikethroughSpan
|
import android.text.style.StrikethroughSpan
|
||||||
import androidx.lifecycle.map
|
import androidx.lifecycle.map
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.net.InetAddressComparator
|
import hanson.xyz.vpnhotspotmod.net.InetAddressComparator
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.room.AppDatabase
|
import hanson.xyz.vpnhotspotmod.room.AppDatabase
|
||||||
import be.mygod.vpnhotspot.room.ClientRecord
|
import hanson.xyz.vpnhotspotmod.room.ClientRecord
|
||||||
import be.mygod.vpnhotspot.util.makeIpSpan
|
import hanson.xyz.vpnhotspotmod.util.makeIpSpan
|
||||||
import be.mygod.vpnhotspot.util.makeMacSpan
|
import hanson.xyz.vpnhotspotmod.util.makeMacSpan
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.client
|
package hanson.xyz.vpnhotspotmod.client
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
@@ -13,18 +13,18 @@ import androidx.lifecycle.DefaultLifecycleObserver
|
|||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.RepeaterService
|
import hanson.xyz.vpnhotspotmod.RepeaterService
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager.localOnlyTetheredIfaces
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager.localOnlyTetheredIfaces
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager.tetheredIfaces
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager.tetheredIfaces
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiClient
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiClient
|
||||||
import be.mygod.vpnhotspot.root.WifiApCommands
|
import hanson.xyz.vpnhotspotmod.root.WifiApCommands
|
||||||
import be.mygod.vpnhotspot.util.broadcastReceiver
|
import hanson.xyz.vpnhotspotmod.util.broadcastReceiver
|
||||||
|
|
||||||
class ClientViewModel : ViewModel(), ServiceConnection, IpNeighbourMonitor.Callback, DefaultLifecycleObserver,
|
class ClientViewModel : ViewModel(), ServiceConnection, IpNeighbourMonitor.Callback, DefaultLifecycleObserver,
|
||||||
WifiApManager.SoftApCallbackCompat {
|
WifiApManager.SoftApCallbackCompat {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.client
|
package hanson.xyz.vpnhotspotmod.client
|
||||||
|
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
@@ -26,22 +26,22 @@ import androidx.recyclerview.widget.DefaultItemAnimator
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.AlertDialogFragment
|
import hanson.xyz.vpnhotspotmod.AlertDialogFragment
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.Empty
|
import hanson.xyz.vpnhotspotmod.Empty
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.databinding.FragmentClientsBinding
|
import hanson.xyz.vpnhotspotmod.databinding.FragmentClientsBinding
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemClientBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemClientBinding
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.TrafficRecorder
|
import hanson.xyz.vpnhotspotmod.net.monitor.TrafficRecorder
|
||||||
import be.mygod.vpnhotspot.room.AppDatabase
|
import hanson.xyz.vpnhotspotmod.room.AppDatabase
|
||||||
import be.mygod.vpnhotspot.room.ClientStats
|
import hanson.xyz.vpnhotspotmod.room.ClientStats
|
||||||
import be.mygod.vpnhotspot.room.TrafficRecord
|
import hanson.xyz.vpnhotspotmod.room.TrafficRecord
|
||||||
import be.mygod.vpnhotspot.util.format
|
import hanson.xyz.vpnhotspotmod.util.format
|
||||||
import be.mygod.vpnhotspot.util.showAllowingStateLoss
|
import hanson.xyz.vpnhotspotmod.util.showAllowingStateLoss
|
||||||
import be.mygod.vpnhotspot.util.toPluralInt
|
import hanson.xyz.vpnhotspotmod.util.toPluralInt
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.client
|
package hanson.xyz.vpnhotspotmod.client
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import androidx.annotation.MainThread
|
import androidx.annotation.MainThread
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.room.AppDatabase
|
import hanson.xyz.vpnhotspotmod.room.AppDatabase
|
||||||
import be.mygod.vpnhotspot.util.connectCancellable
|
import hanson.xyz.vpnhotspotmod.util.connectCancellable
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.CoroutineStart
|
import kotlinx.coroutines.CoroutineStart
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -73,6 +73,7 @@ object MacLookup {
|
|||||||
var response: String? = null
|
var response: String? = null
|
||||||
try {
|
try {
|
||||||
response = connectCancellable("https://mac-address.alldatafeeds.com/api/mac-address/lookup") { conn ->
|
response = connectCancellable("https://mac-address.alldatafeeds.com/api/mac-address/lookup") { conn ->
|
||||||
|
conn.doOutput = true
|
||||||
conn.requestMethod = "POST"
|
conn.requestMethod = "POST"
|
||||||
conn.setRequestProperty("Content-Type", "application/json")
|
conn.setRequestProperty("Content-Type", "application/json")
|
||||||
conn.outputStream.writer().use { it.write("{\"mac-address\":\"$mac\"}") }
|
conn.outputStream.writer().use { it.write("{\"mac-address\":\"$mac\"}") }
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.bluetooth.BluetoothAdapter
|
import android.bluetooth.BluetoothAdapter
|
||||||
@@ -8,11 +8,11 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.util.broadcastReceiver
|
import hanson.xyz.vpnhotspotmod.util.broadcastReceiver
|
||||||
import be.mygod.vpnhotspot.util.readableMessage
|
import hanson.xyz.vpnhotspotmod.util.readableMessage
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.lang.reflect.InvocationTargetException
|
import java.lang.reflect.InvocationTargetException
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import androidx.databinding.BaseObservable
|
import androidx.databinding.BaseObservable
|
||||||
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.TetheringService
|
import hanson.xyz.vpnhotspotmod.TetheringService
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemInterfaceBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemInterfaceBinding
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.util.formatAddresses
|
import hanson.xyz.vpnhotspotmod.util.formatAddresses
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class InterfaceManager(private val parent: TetheringFragment, val iface: String) : Manager() {
|
class InterfaceManager(private val parent: TetheringFragment, val iface: String) : Manager() {
|
||||||
@@ -28,9 +28,10 @@ class InterfaceManager(private val parent: TetheringFragment, val iface: String)
|
|||||||
.putExtra(TetheringService.EXTRA_ADD_INTERFACES, arrayOf(iface)))
|
.putExtra(TetheringService.EXTRA_ADD_INTERFACES, arrayOf(iface)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private inner class Data : be.mygod.vpnhotspot.manage.Data() {
|
private inner class Data : hanson.xyz.vpnhotspotmod.manage.Data() {
|
||||||
override val icon get() = TetherType.ofInterface(iface).icon
|
override val icon get() = TetherType.ofInterface(iface).icon
|
||||||
override val title get() = if (parent.binder?.monitored(iface) == true) {
|
override val title get() = if (parent.binder?.monitored(iface) == true) {
|
||||||
|
// override val title get() = if (true) {
|
||||||
parent.getString(R.string.tethering_state_monitored, iface)
|
parent.getString(R.string.tethering_state_monitored, iface)
|
||||||
} else iface
|
} else iface
|
||||||
override val text get() = addresses
|
override val text get() = addresses
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.service.quicksettings.Tile
|
import android.service.quicksettings.Tile
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import be.mygod.vpnhotspot.util.KillableTileService
|
import hanson.xyz.vpnhotspotmod.util.KillableTileService
|
||||||
import java.net.Inet4Address
|
import java.net.Inet4Address
|
||||||
|
|
||||||
abstract class IpNeighbourMonitoringTileService : KillableTileService(), IpNeighbourMonitor.Callback {
|
abstract class IpNeighbourMonitoringTileService : KillableTileService(), IpNeighbourMonitor.Callback {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
@@ -8,12 +8,12 @@ import android.os.Build
|
|||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.LocalOnlyHotspotService
|
import hanson.xyz.vpnhotspotmod.LocalOnlyHotspotService
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemInterfaceBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemInterfaceBinding
|
||||||
import be.mygod.vpnhotspot.util.ServiceForegroundConnector
|
import hanson.xyz.vpnhotspotmod.util.ServiceForegroundConnector
|
||||||
import be.mygod.vpnhotspot.util.formatAddresses
|
import hanson.xyz.vpnhotspotmod.util.formatAddresses
|
||||||
import java.net.NetworkInterface
|
import java.net.NetworkInterface
|
||||||
|
|
||||||
class LocalOnlyHotspotManager(private val parent: TetheringFragment) : Manager(), ServiceConnection {
|
class LocalOnlyHotspotManager(private val parent: TetheringFragment) : Manager(), ServiceConnection {
|
||||||
@@ -38,7 +38,7 @@ class LocalOnlyHotspotManager(private val parent: TetheringFragment) : Manager()
|
|||||||
if (binder?.iface == null) manager.parent.startLocalOnlyHotspot.launch(permission) else binder.stop()
|
if (binder?.iface == null) manager.parent.startLocalOnlyHotspot.launch(permission) else binder.stop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private inner class Data : be.mygod.vpnhotspot.manage.Data() {
|
private inner class Data : hanson.xyz.vpnhotspotmod.manage.Data() {
|
||||||
private val lookup: Map<String, NetworkInterface> get() = parent.ifaceLookup
|
private val lookup: Map<String, NetworkInterface> get() = parent.ifaceLookup
|
||||||
|
|
||||||
override val icon get() = R.drawable.ic_action_perm_scan_wifi
|
override val icon get() = R.drawable.ic_action_perm_scan_wifi
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -6,9 +6,9 @@ import android.content.Intent
|
|||||||
import android.graphics.drawable.Icon
|
import android.graphics.drawable.Icon
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.service.quicksettings.Tile
|
import android.service.quicksettings.Tile
|
||||||
import be.mygod.vpnhotspot.LocalOnlyHotspotService
|
import hanson.xyz.vpnhotspotmod.LocalOnlyHotspotService
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.util.stopAndUnbind
|
import hanson.xyz.vpnhotspotmod.util.stopAndUnbind
|
||||||
|
|
||||||
class LocalOnlyHotspotTileService : IpNeighbourMonitoringTileService() {
|
class LocalOnlyHotspotTileService : IpNeighbourMonitoringTileService() {
|
||||||
private val tile by lazy { Icon.createWithResource(application, R.drawable.ic_action_perm_scan_wifi) }
|
private val tile by lazy { Icon.createWithResource(application, R.drawable.ic_action_perm_scan_wifi) }
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.databinding.BaseObservable
|
import androidx.databinding.BaseObservable
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemManageBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemManageBinding
|
||||||
import be.mygod.vpnhotspot.net.TetherOffloadManager
|
import hanson.xyz.vpnhotspotmod.net.TetherOffloadManager
|
||||||
|
|
||||||
object ManageBar : Manager() {
|
object ManageBar : Manager() {
|
||||||
private const val TAG = "ManageBar"
|
private const val TAG = "ManageBar"
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemInterfaceBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemInterfaceBinding
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemManageBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemManageBinding
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemRepeaterBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemRepeaterBinding
|
||||||
|
|
||||||
abstract class Manager {
|
abstract class Manager {
|
||||||
companion object DiffCallback : DiffUtil.ItemCallback<Manager>() {
|
companion object DiffCallback : DiffUtil.ItemCallback<Manager>() {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
@@ -24,21 +24,21 @@ import androidx.lifecycle.ViewModel
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.withStarted
|
import androidx.lifecycle.withStarted
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.AlertDialogFragment
|
import hanson.xyz.vpnhotspotmod.AlertDialogFragment
|
||||||
import be.mygod.vpnhotspot.BR
|
import hanson.xyz.vpnhotspotmod.BR
|
||||||
import be.mygod.vpnhotspot.Empty
|
import hanson.xyz.vpnhotspotmod.Empty
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.RepeaterService
|
import hanson.xyz.vpnhotspotmod.RepeaterService
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemRepeaterBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemRepeaterBinding
|
||||||
import be.mygod.vpnhotspot.net.wifi.P2pSupplicantConfiguration
|
import hanson.xyz.vpnhotspotmod.net.wifi.P2pSupplicantConfiguration
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApDialogFragment
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApDialogFragment
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiSsidCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiSsidCompat
|
||||||
import be.mygod.vpnhotspot.util.ServiceForegroundConnector
|
import hanson.xyz.vpnhotspotmod.util.ServiceForegroundConnector
|
||||||
import be.mygod.vpnhotspot.util.formatAddresses
|
import hanson.xyz.vpnhotspotmod.util.formatAddresses
|
||||||
import be.mygod.vpnhotspot.util.showAllowingStateLoss
|
import hanson.xyz.vpnhotspotmod.util.showAllowingStateLoss
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -7,11 +7,11 @@ import android.graphics.drawable.Icon
|
|||||||
import android.net.wifi.p2p.WifiP2pGroup
|
import android.net.wifi.p2p.WifiP2pGroup
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.service.quicksettings.Tile
|
import android.service.quicksettings.Tile
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.RepeaterService
|
import hanson.xyz.vpnhotspotmod.RepeaterService
|
||||||
import be.mygod.vpnhotspot.util.KillableTileService
|
import hanson.xyz.vpnhotspotmod.util.KillableTileService
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.stopAndUnbind
|
import hanson.xyz.vpnhotspotmod.util.stopAndUnbind
|
||||||
|
|
||||||
class RepeaterTileService : KillableTileService() {
|
class RepeaterTileService : KillableTileService() {
|
||||||
private val tile by lazy { Icon.createWithResource(application, R.drawable.ic_action_settings_input_antenna) }
|
private val tile by lazy { Icon.createWithResource(application, R.drawable.ic_action_settings_input_antenna) }
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
@@ -19,16 +19,16 @@ import androidx.core.view.updatePaddingRelative
|
|||||||
import androidx.lifecycle.DefaultLifecycleObserver
|
import androidx.lifecycle.DefaultLifecycleObserver
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.MainActivity
|
import hanson.xyz.vpnhotspotmod.MainActivity
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.databinding.ListitemInterfaceBinding
|
import hanson.xyz.vpnhotspotmod.databinding.ListitemInterfaceBinding
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.net.wifi.*
|
import hanson.xyz.vpnhotspotmod.net.wifi.*
|
||||||
import be.mygod.vpnhotspot.root.WifiApCommands
|
import hanson.xyz.vpnhotspotmod.root.WifiApCommands
|
||||||
import be.mygod.vpnhotspot.util.*
|
import hanson.xyz.vpnhotspotmod.util.*
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -78,7 +78,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(),
|
|||||||
/**
|
/**
|
||||||
* A convenient class to delegate stuff to BaseObservable.
|
* A convenient class to delegate stuff to BaseObservable.
|
||||||
*/
|
*/
|
||||||
inner class Data : be.mygod.vpnhotspot.manage.Data() {
|
inner class Data : hanson.xyz.vpnhotspotmod.manage.Data() {
|
||||||
override val icon get() = tetherType.icon
|
override val icon get() = tetherType.icon
|
||||||
override val title get() = this@TetherManager.title
|
override val title get() = this@TetherManager.title
|
||||||
override val text get() = this@TetherManager.text
|
override val text get() = this@TetherManager.text
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.bluetooth.BluetoothManager
|
import android.bluetooth.BluetoothManager
|
||||||
@@ -21,22 +21,22 @@ import androidx.recyclerview.widget.DefaultItemAnimator
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import be.mygod.vpnhotspot.*
|
import hanson.xyz.vpnhotspotmod.*
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.databinding.FragmentTetheringBinding
|
import hanson.xyz.vpnhotspotmod.databinding.FragmentTetheringBinding
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager.localOnlyTetheredIfaces
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager.localOnlyTetheredIfaces
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager.tetheredIfaces
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager.tetheredIfaces
|
||||||
import be.mygod.vpnhotspot.net.monitor.TetherTimeoutMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.TetherTimeoutMonitor
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat.Companion.toCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat.Companion.toCompat
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApDialogFragment
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApDialogFragment
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.root.WifiApCommands
|
import hanson.xyz.vpnhotspotmod.root.WifiApCommands
|
||||||
import be.mygod.vpnhotspot.util.*
|
import hanson.xyz.vpnhotspotmod.util.*
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.manage
|
package hanson.xyz.vpnhotspotmod.manage
|
||||||
|
|
||||||
import android.bluetooth.BluetoothManager
|
import android.bluetooth.BluetoothManager
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
@@ -12,14 +12,14 @@ import android.service.quicksettings.Tile
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.TetheringService
|
import hanson.xyz.vpnhotspotmod.TetheringService
|
||||||
import be.mygod.vpnhotspot.net.TetherType
|
import hanson.xyz.vpnhotspotmod.net.TetherType
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager.tetheredIfaces
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager.tetheredIfaces
|
||||||
import be.mygod.vpnhotspot.util.broadcastReceiver
|
import hanson.xyz.vpnhotspotmod.util.broadcastReceiver
|
||||||
import be.mygod.vpnhotspot.util.readableMessage
|
import hanson.xyz.vpnhotspotmod.util.readableMessage
|
||||||
import be.mygod.vpnhotspot.util.stopAndUnbind
|
import hanson.xyz.vpnhotspotmod.util.stopAndUnbind
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.Routing.Companion.IP
|
import hanson.xyz.vpnhotspotmod.net.Routing.Companion.IP
|
||||||
import be.mygod.vpnhotspot.root.RoutingCommands
|
import hanson.xyz.vpnhotspotmod.root.RoutingCommands
|
||||||
import be.mygod.vpnhotspot.util.RootSession
|
import hanson.xyz.vpnhotspotmod.util.RootSession
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
|
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.system.ErrnoException
|
import android.system.ErrnoException
|
||||||
import android.system.Os
|
import android.system.Os
|
||||||
import android.system.OsConstants
|
import android.system.OsConstants
|
||||||
import be.mygod.vpnhotspot.root.ReadArp
|
import hanson.xyz.vpnhotspotmod.root.ReadArp
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.util.parseNumericAddress
|
import hanson.xyz.vpnhotspotmod.util.parseNumericAddress
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import java.nio.ByteBuffer
|
import java.nio.ByteBuffer
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.net.RouteInfo
|
import android.net.RouteInfo
|
||||||
import android.system.Os
|
import android.system.Os
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.net.monitor.FallbackUpstreamMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.FallbackUpstreamMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.IpNeighbourMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.IpNeighbourMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.TrafficRecorder
|
import hanson.xyz.vpnhotspotmod.net.monitor.TrafficRecorder
|
||||||
import be.mygod.vpnhotspot.net.monitor.UpstreamMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.UpstreamMonitor
|
||||||
import be.mygod.vpnhotspot.room.AppDatabase
|
import hanson.xyz.vpnhotspotmod.room.AppDatabase
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.root.RoutingCommands
|
import hanson.xyz.vpnhotspotmod.root.RoutingCommands
|
||||||
import be.mygod.vpnhotspot.util.RootSession
|
import hanson.xyz.vpnhotspotmod.util.RootSession
|
||||||
import be.mygod.vpnhotspot.util.allInterfaceNames
|
import hanson.xyz.vpnhotspotmod.util.allInterfaceNames
|
||||||
import be.mygod.vpnhotspot.util.allRoutes
|
import hanson.xyz.vpnhotspotmod.util.allRoutes
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.BufferedWriter
|
import java.io.BufferedWriter
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.root.SettingsGlobalPut
|
import hanson.xyz.vpnhotspotmod.root.SettingsGlobalPut
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* It's hard to change tethering rules with Tethering hardware acceleration enabled for now.
|
* It's hard to change tethering rules with Tethering hardware acceleration enabled for now.
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.util.Event0
|
import hanson.xyz.vpnhotspotmod.util.Event0
|
||||||
import be.mygod.vpnhotspot.util.findIdentifier
|
import hanson.xyz.vpnhotspotmod.util.findIdentifier
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net
|
package hanson.xyz.vpnhotspotmod.net
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
@@ -12,14 +12,18 @@ import android.net.Network
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.DeadObjectException
|
import android.os.DeadObjectException
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.core.content.ContextCompat.startActivity
|
||||||
import androidx.core.os.ExecutorCompat
|
import androidx.core.os.ExecutorCompat
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.root.StartTethering
|
import hanson.xyz.vpnhotspotmod.root.StartTethering
|
||||||
import be.mygod.vpnhotspot.root.StopTethering
|
import hanson.xyz.vpnhotspotmod.root.StopTethering
|
||||||
import be.mygod.vpnhotspot.util.*
|
import hanson.xyz.vpnhotspotmod.util.*
|
||||||
import com.android.dx.stock.ProxyBuilder
|
import com.android.dx.stock.ProxyBuilder
|
||||||
|
import hanson.xyz.vpnhotspotmod.App
|
||||||
|
import hanson.xyz.vpnhotspotmod.TetheringService
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -335,7 +339,7 @@ object TetheringManager {
|
|||||||
rootCache.mkdirs()
|
rootCache.mkdirs()
|
||||||
check(rootCache.exists()) { "Creating root cache dir failed" }
|
check(rootCache.exists()) { "Creating root cache dir failed" }
|
||||||
RootManager.use {
|
RootManager.use {
|
||||||
it.execute(be.mygod.vpnhotspot.root.StartTetheringLegacy(
|
it.execute(hanson.xyz.vpnhotspotmod.root.StartTetheringLegacy(
|
||||||
rootCache, type, showProvisioningUi))
|
rootCache, type, showProvisioningUi))
|
||||||
}.value
|
}.value
|
||||||
} catch (eRoot: Exception) {
|
} catch (eRoot: Exception) {
|
||||||
@@ -447,7 +451,9 @@ object TetheringManager {
|
|||||||
* multiple times later upon changes.
|
* multiple times later upon changes.
|
||||||
* @param interfaces The list of tetherable interface names.
|
* @param interfaces The list of tetherable interface names.
|
||||||
*/
|
*/
|
||||||
fun onTetherableInterfacesChanged(interfaces: List<String?>) {}
|
fun onTetherableInterfacesChanged(interfaces: List<String?>) {
|
||||||
|
//hansonxyz
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when there was a change in the list of tethered interfaces.
|
* Called when there was a change in the list of tethered interfaces.
|
||||||
@@ -554,10 +560,29 @@ object TetheringManager {
|
|||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
callback?.onTetherableInterfacesChanged(args!![0] as List<String?>)
|
callback?.onTetherableInterfacesChanged(args!![0] as List<String?>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// modified by hansonxyz
|
||||||
method.matches1<java.util.List<*>>("onTetheredInterfacesChanged") -> {
|
method.matches1<java.util.List<*>>("onTetheredInterfacesChanged") -> {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
callback?.onTetheredInterfacesChanged(args!![0] as List<String?>)
|
val tetheredInterfaces = args!![0] as List<String?>
|
||||||
|
callback?.onTetheredInterfacesChanged(tetheredInterfaces)
|
||||||
|
|
||||||
|
// Toast.makeText(this, "Adding Tether Interface to VPN", 5).show()
|
||||||
|
|
||||||
|
// hansonxyz
|
||||||
|
tetheredInterfaces?.let {
|
||||||
|
for (iface in it) {
|
||||||
|
App.app.startForegroundService(
|
||||||
|
Intent(App.app, TetheringService::class.java)
|
||||||
|
.putExtra(
|
||||||
|
TetheringService.EXTRA_ADD_INTERFACES,
|
||||||
|
arrayOf(iface)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
method.matches("onError", String::class.java, Integer.TYPE) -> {
|
method.matches("onError", String::class.java, Integer.TYPE) -> {
|
||||||
callback?.onError(args!![0] as String, args[1] as Int)
|
callback?.onError(args!![0] as String, args[1] as Int)
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
import android.net.Network
|
import android.net.Network
|
||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder
|
import hanson.xyz.vpnhotspotmod.util.globalNetworkRequestBuilder
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
import android.net.Network
|
import android.net.Network
|
||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.allInterfaceNames
|
import hanson.xyz.vpnhotspotmod.util.allInterfaceNames
|
||||||
import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder
|
import hanson.xyz.vpnhotspotmod.util.globalNetworkRequestBuilder
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import be.mygod.librootkotlinx.RootServer
|
import be.mygod.librootkotlinx.RootServer
|
||||||
import be.mygod.librootkotlinx.isEBADF
|
import be.mygod.librootkotlinx.isEBADF
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.net.Routing
|
import hanson.xyz.vpnhotspotmod.net.Routing
|
||||||
import be.mygod.vpnhotspot.root.ProcessData
|
import hanson.xyz.vpnhotspotmod.root.ProcessData
|
||||||
import be.mygod.vpnhotspot.root.ProcessListener
|
import hanson.xyz.vpnhotspotmod.root.ProcessListener
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.root.RoutingCommands
|
import hanson.xyz.vpnhotspotmod.root.RoutingCommands
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.channels.ReceiveChannel
|
import kotlinx.coroutines.channels.ReceiveChannel
|
||||||
import kotlinx.coroutines.channels.consumeEach
|
import kotlinx.coroutines.channels.consumeEach
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import be.mygod.vpnhotspot.net.IpDev
|
import hanson.xyz.vpnhotspotmod.net.IpDev
|
||||||
import be.mygod.vpnhotspot.net.IpNeighbour
|
import hanson.xyz.vpnhotspotmod.net.IpNeighbour
|
||||||
import kotlinx.collections.immutable.PersistentMap
|
import kotlinx.collections.immutable.PersistentMap
|
||||||
import kotlinx.collections.immutable.persistentMapOf
|
import kotlinx.collections.immutable.persistentMapOf
|
||||||
import kotlinx.collections.immutable.toPersistentMap
|
import kotlinx.collections.immutable.toPersistentMap
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
import be.mygod.vpnhotspot.root.SettingsGlobalPut
|
import hanson.xyz.vpnhotspotmod.root.SettingsGlobalPut
|
||||||
import be.mygod.vpnhotspot.util.findIdentifier
|
import hanson.xyz.vpnhotspotmod.util.findIdentifier
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import androidx.collection.LongSparseArray
|
import androidx.collection.LongSparseArray
|
||||||
import androidx.collection.set
|
import androidx.collection.set
|
||||||
import be.mygod.vpnhotspot.net.IpDev
|
import hanson.xyz.vpnhotspotmod.net.IpDev
|
||||||
import be.mygod.vpnhotspot.net.Routing.Companion.IPTABLES
|
import hanson.xyz.vpnhotspotmod.net.Routing.Companion.IPTABLES
|
||||||
import be.mygod.vpnhotspot.room.AppDatabase
|
import hanson.xyz.vpnhotspotmod.room.AppDatabase
|
||||||
import be.mygod.vpnhotspot.room.TrafficRecord
|
import hanson.xyz.vpnhotspotmod.room.TrafficRecord
|
||||||
import be.mygod.vpnhotspot.util.Event2
|
import hanson.xyz.vpnhotspotmod.util.Event2
|
||||||
import be.mygod.vpnhotspot.util.RootSession
|
import hanson.xyz.vpnhotspotmod.util.RootSession
|
||||||
import be.mygod.vpnhotspot.util.parseNumericAddress
|
import hanson.xyz.vpnhotspotmod.util.parseNumericAddress
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.CoroutineStart
|
import kotlinx.coroutines.CoroutineStart
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.net.monitor
|
package hanson.xyz.vpnhotspotmod.net.monitor
|
||||||
|
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.LinkProperties
|
import android.net.LinkProperties
|
||||||
import android.net.Network
|
import android.net.Network
|
||||||
import android.net.NetworkCapabilities
|
import android.net.NetworkCapabilities
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder
|
import hanson.xyz.vpnhotspotmod.util.globalNetworkRequestBuilder
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.net.wifi.p2p.WifiP2pGroup
|
import android.net.wifi.p2p.WifiP2pGroup
|
||||||
import be.mygod.vpnhotspot.RepeaterService
|
import hanson.xyz.vpnhotspotmod.RepeaterService
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat
|
||||||
import be.mygod.vpnhotspot.root.RepeaterCommands
|
import hanson.xyz.vpnhotspotmod.root.RepeaterCommands
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.util.LongConstantLookup
|
import hanson.xyz.vpnhotspotmod.util.LongConstantLookup
|
||||||
import be.mygod.vpnhotspot.util.UnblockCentral
|
import hanson.xyz.vpnhotspotmod.util.UnblockCentral
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@JvmInline
|
@JvmInline
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
@@ -10,12 +10,12 @@ import android.os.Build
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.util.SparseIntArray
|
import android.util.SparseIntArray
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.net.monitor.TetherTimeoutMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.TetherTimeoutMonitor
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat.Companion.requireSingleBand
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat.Companion.requireSingleBand
|
||||||
import be.mygod.vpnhotspot.net.wifi.SoftApConfigurationCompat.Companion.setChannel
|
import hanson.xyz.vpnhotspotmod.net.wifi.SoftApConfigurationCompat.Companion.setChannel
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiSsidCompat.Companion.toCompat
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiSsidCompat.Companion.toCompat
|
||||||
import be.mygod.vpnhotspot.util.ConstantLookup
|
import hanson.xyz.vpnhotspotmod.util.ConstantLookup
|
||||||
import be.mygod.vpnhotspot.util.UnblockCentral
|
import hanson.xyz.vpnhotspotmod.util.UnblockCentral
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.lang.reflect.InvocationTargetException
|
import java.lang.reflect.InvocationTargetException
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.util.ConstantLookup
|
import hanson.xyz.vpnhotspotmod.util.ConstantLookup
|
||||||
import be.mygod.vpnhotspot.util.UnblockCentral
|
import hanson.xyz.vpnhotspotmod.util.UnblockCentral
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@JvmInline
|
@JvmInline
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.net.wifi.ScanResult
|
import android.net.wifi.ScanResult
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
@@ -22,22 +22,21 @@ import android.widget.Toast
|
|||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.os.BuildCompat
|
|
||||||
import androidx.core.os.persistableBundleOf
|
import androidx.core.os.persistableBundleOf
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import be.mygod.librootkotlinx.toByteArray
|
import be.mygod.librootkotlinx.toByteArray
|
||||||
import be.mygod.librootkotlinx.toParcelable
|
import be.mygod.librootkotlinx.toParcelable
|
||||||
import be.mygod.vpnhotspot.AlertDialogFragment
|
import hanson.xyz.vpnhotspotmod.AlertDialogFragment
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.RepeaterService
|
import hanson.xyz.vpnhotspotmod.RepeaterService
|
||||||
import be.mygod.vpnhotspot.databinding.DialogWifiApBinding
|
import hanson.xyz.vpnhotspotmod.databinding.DialogWifiApBinding
|
||||||
import be.mygod.vpnhotspot.net.monitor.TetherTimeoutMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.TetherTimeoutMonitor
|
||||||
import be.mygod.vpnhotspot.util.QRCodeDialog
|
import hanson.xyz.vpnhotspotmod.util.QRCodeDialog
|
||||||
import be.mygod.vpnhotspot.util.RangeInput
|
import hanson.xyz.vpnhotspotmod.util.RangeInput
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.readableMessage
|
import hanson.xyz.vpnhotspotmod.util.readableMessage
|
||||||
import be.mygod.vpnhotspot.util.showAllowingStateLoss
|
import hanson.xyz.vpnhotspotmod.util.showAllowingStateLoss
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -517,7 +516,7 @@ class WifiApDialogFragment : AlertDialogFragment<WifiApDialogFragment.Arg, WifiA
|
|||||||
val canGenerate = ssidOk && passwordValid && bandError == null && canCopy
|
val canGenerate = ssidOk && passwordValid && bandError == null && canCopy
|
||||||
(dialog as? AlertDialog)?.getButton(DialogInterface.BUTTON_POSITIVE)?.isEnabled = canGenerate
|
(dialog as? AlertDialog)?.getButton(DialogInterface.BUTTON_POSITIVE)?.isEnabled = canGenerate
|
||||||
dialogView.toolbar.menu.apply {
|
dialogView.toolbar.menu.apply {
|
||||||
findItem(R.id.invalid).isVisible = canGenerate && BuildCompat.isAtLeastU() && !arg.p2pMode &&
|
findItem(R.id.invalid).isVisible = canGenerate && Build.VERSION.SDK_INT >= 34 && !arg.p2pMode &&
|
||||||
!arg.readOnly && !Services.wifi.validateSoftApConfiguration(generateConfig().toPlatform())
|
!arg.readOnly && !Services.wifi.validateSoftApConfiguration(generateConfig().toPlatform())
|
||||||
findItem(android.R.id.copy).isEnabled = canCopy
|
findItem(android.R.id.copy).isEnabled = canCopy
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -11,8 +11,8 @@ import android.os.Build
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.util.*
|
import hanson.xyz.vpnhotspotmod.util.*
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.lang.reflect.InvocationHandler
|
import java.lang.reflect.InvocationHandler
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.util.UnblockCentral
|
import hanson.xyz.vpnhotspotmod.util.UnblockCentral
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@JvmInline
|
@JvmInline
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
@@ -12,8 +12,8 @@ import androidx.core.content.edit
|
|||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.lifecycle.DefaultLifecycleObserver
|
import androidx.lifecycle.DefaultLifecycleObserver
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This mechanism is used to maximize profit. Source: https://stackoverflow.com/a/29657230/2245107
|
* This mechanism is used to maximize profit. Source: https://stackoverflow.com/a/29657230/2245107
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
@@ -8,10 +8,10 @@ import android.net.wifi.p2p.WifiP2pGroup
|
|||||||
import android.net.wifi.p2p.WifiP2pInfo
|
import android.net.wifi.p2p.WifiP2pInfo
|
||||||
import android.net.wifi.p2p.WifiP2pManager
|
import android.net.wifi.p2p.WifiP2pManager
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat
|
||||||
import be.mygod.vpnhotspot.util.callSuper
|
import hanson.xyz.vpnhotspotmod.util.callSuper
|
||||||
import be.mygod.vpnhotspot.util.matches
|
import hanson.xyz.vpnhotspotmod.util.matches
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import java.lang.reflect.InvocationHandler
|
import java.lang.reflect.InvocationHandler
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.net.wifi
|
package hanson.xyz.vpnhotspotmod.net.wifi
|
||||||
|
|
||||||
import android.net.wifi.WifiSsid
|
import android.net.wifi.WifiSsid
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.preference
|
package hanson.xyz.vpnhotspotmod.preference
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
@@ -12,11 +12,11 @@ import androidx.core.os.bundleOf
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.withStarted
|
import androidx.lifecycle.withStarted
|
||||||
import androidx.preference.EditTextPreferenceDialogFragmentCompat
|
import androidx.preference.EditTextPreferenceDialogFragmentCompat
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.allInterfaceNames
|
import hanson.xyz.vpnhotspotmod.util.allInterfaceNames
|
||||||
import be.mygod.vpnhotspot.util.globalNetworkRequestBuilder
|
import hanson.xyz.vpnhotspotmod.util.globalNetworkRequestBuilder
|
||||||
import be.mygod.vpnhotspot.widget.AlwaysAutoCompleteEditText
|
import hanson.xyz.vpnhotspotmod.widget.AlwaysAutoCompleteEditText
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class AutoCompleteNetworkPreferenceDialogFragment : EditTextPreferenceDialogFragmentCompat() {
|
class AutoCompleteNetworkPreferenceDialogFragment : EditTextPreferenceDialogFragmentCompat() {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.preference
|
package hanson.xyz.vpnhotspotmod.preference
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.preference
|
package hanson.xyz.vpnhotspotmod.preference
|
||||||
|
|
||||||
import androidx.preference.EditTextPreference
|
import androidx.preference.EditTextPreference
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.preference
|
package hanson.xyz.vpnhotspotmod.preference
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
@@ -10,12 +10,12 @@ import androidx.lifecycle.DefaultLifecycleObserver
|
|||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.net.monitor.FallbackUpstreamMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.FallbackUpstreamMonitor
|
||||||
import be.mygod.vpnhotspot.net.monitor.UpstreamMonitor
|
import hanson.xyz.vpnhotspotmod.net.monitor.UpstreamMonitor
|
||||||
import be.mygod.vpnhotspot.util.allRoutes
|
import hanson.xyz.vpnhotspotmod.util.allRoutes
|
||||||
import be.mygod.vpnhotspot.util.format
|
import hanson.xyz.vpnhotspotmod.util.format
|
||||||
import be.mygod.vpnhotspot.util.parseNumericAddress
|
import hanson.xyz.vpnhotspotmod.util.parseNumericAddress
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.room
|
package hanson.xyz.vpnhotspotmod.room
|
||||||
|
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
@@ -6,7 +6,7 @@ import androidx.room.RoomDatabase
|
|||||||
import androidx.room.TypeConverters
|
import androidx.room.TypeConverters
|
||||||
import androidx.room.migration.Migration
|
import androidx.room.migration.Migration
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package be.mygod.vpnhotspot.room
|
package hanson.xyz.vpnhotspotmod.room
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.map
|
import androidx.lifecycle.map
|
||||||
import androidx.room.*
|
import androidx.room.*
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat.Companion.toLong
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat.Companion.toLong
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
data class ClientRecord(@PrimaryKey
|
data class ClientRecord(@PrimaryKey
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.room
|
package hanson.xyz.vpnhotspotmod.room
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import androidx.room.TypeConverter
|
import androidx.room.TypeConverter
|
||||||
import be.mygod.librootkotlinx.useParcel
|
import be.mygod.librootkotlinx.useParcel
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat.Companion.toLong
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat.Companion.toLong
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.room
|
package hanson.xyz.vpnhotspotmod.room
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.root
|
package hanson.xyz.vpnhotspotmod.root
|
||||||
|
|
||||||
import android.net.wifi.SoftApConfiguration
|
import android.net.wifi.SoftApConfiguration
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.root
|
package hanson.xyz.vpnhotspotmod.root
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
@@ -6,11 +6,11 @@ import android.os.RemoteException
|
|||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.librootkotlinx.*
|
import be.mygod.librootkotlinx.*
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.Routing.Companion.IP
|
import hanson.xyz.vpnhotspotmod.net.Routing.Companion.IP
|
||||||
import be.mygod.vpnhotspot.net.Routing.Companion.IPTABLES
|
import hanson.xyz.vpnhotspotmod.net.Routing.Companion.IPTABLES
|
||||||
import be.mygod.vpnhotspot.net.TetheringManager
|
import hanson.xyz.vpnhotspotmod.net.TetheringManager
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.channels.onClosed
|
import kotlinx.coroutines.channels.onClosed
|
||||||
import kotlinx.coroutines.channels.onFailure
|
import kotlinx.coroutines.channels.onFailure
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.root
|
package hanson.xyz.vpnhotspotmod.root
|
||||||
|
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.net.wifi.ScanResult
|
import android.net.wifi.ScanResult
|
||||||
@@ -10,12 +10,12 @@ import android.system.OsConstants
|
|||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.librootkotlinx.*
|
import be.mygod.librootkotlinx.*
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.deletePersistentGroup
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.deletePersistentGroup
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestDeviceAddress
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestDeviceAddress
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.requestPersistentGroupInfo
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.requestPersistentGroupInfo
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.setVendorElements
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.setVendorElements
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiP2pManagerHelper.setWifiP2pChannels
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiP2pManagerHelper.setWifiP2pChannels
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package be.mygod.vpnhotspot.root
|
package hanson.xyz.vpnhotspotmod.root
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import be.mygod.librootkotlinx.*
|
import be.mygod.librootkotlinx.*
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.util.Services
|
import hanson.xyz.vpnhotspotmod.util.Services
|
||||||
import be.mygod.vpnhotspot.util.UnblockCentral
|
import hanson.xyz.vpnhotspotmod.util.UnblockCentral
|
||||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package be.mygod.vpnhotspot.root
|
package hanson.xyz.vpnhotspotmod.root
|
||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import be.mygod.librootkotlinx.RootCommand
|
import be.mygod.librootkotlinx.RootCommand
|
||||||
import be.mygod.librootkotlinx.RootCommandNoResult
|
import be.mygod.librootkotlinx.RootCommandNoResult
|
||||||
import be.mygod.vpnhotspot.net.Routing
|
import hanson.xyz.vpnhotspotmod.net.Routing
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.root
|
package hanson.xyz.vpnhotspotmod.root
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
@@ -10,11 +10,11 @@ import androidx.annotation.RequiresApi
|
|||||||
import be.mygod.librootkotlinx.ParcelableBoolean
|
import be.mygod.librootkotlinx.ParcelableBoolean
|
||||||
import be.mygod.librootkotlinx.RootCommand
|
import be.mygod.librootkotlinx.RootCommand
|
||||||
import be.mygod.librootkotlinx.RootCommandChannel
|
import be.mygod.librootkotlinx.RootCommandChannel
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiApManager
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
|
||||||
import be.mygod.vpnhotspot.net.wifi.WifiClient
|
import hanson.xyz.vpnhotspotmod.net.wifi.WifiClient
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.channels.*
|
import kotlinx.coroutines.channels.*
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.collection.LongSparseArray
|
import androidx.collection.LongSparseArray
|
||||||
import androidx.collection.SparseArrayCompat
|
import androidx.collection.SparseArrayCompat
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
class ConstantLookup(private val prefix: String, private val lookup29: Array<out String?>,
|
class ConstantLookup(private val prefix: String, private val lookup29: Array<out String?>,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.text.style.URLSpan
|
import android.text.style.URLSpan
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -8,7 +8,7 @@ import android.os.DeadObjectException
|
|||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.service.quicksettings.Tile
|
import android.service.quicksettings.Tile
|
||||||
import android.service.quicksettings.TileService
|
import android.service.quicksettings.TileService
|
||||||
import be.mygod.vpnhotspot.BootReceiver
|
import hanson.xyz.vpnhotspotmod.BootReceiver
|
||||||
|
|
||||||
abstract class KillableTileService : TileService(), ServiceConnection {
|
abstract class KillableTileService : TileService(), ServiceConnection {
|
||||||
protected var tapPending = false
|
protected var tapPending = false
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
@@ -9,7 +9,7 @@ import android.widget.ImageView
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import be.mygod.vpnhotspot.R
|
import hanson.xyz.vpnhotspotmod.R
|
||||||
import com.google.zxing.BarcodeFormat
|
import com.google.zxing.BarcodeFormat
|
||||||
import com.google.zxing.EncodeHintType
|
import com.google.zxing.EncodeHintType
|
||||||
import com.google.zxing.MultiFormatWriter
|
import com.google.zxing.MultiFormatWriter
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
object RangeInput {
|
object RangeInput {
|
||||||
fun toString(input: IntArray) = StringBuilder().apply {
|
fun toString(input: IntArray) = StringBuilder().apply {
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import be.mygod.librootkotlinx.RootServer
|
import be.mygod.librootkotlinx.RootServer
|
||||||
import be.mygod.vpnhotspot.root.RootManager
|
import hanson.xyz.vpnhotspotmod.root.RootManager
|
||||||
import be.mygod.vpnhotspot.root.RoutingCommands
|
import hanson.xyz.vpnhotspotmod.root.RoutingCommands
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.locks.ReentrantLock
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
import kotlin.concurrent.withLock
|
import kotlin.concurrent.withLock
|
||||||
|
import android.util.Log
|
||||||
|
|
||||||
class RootSession : AutoCloseable {
|
class RootSession : AutoCloseable {
|
||||||
companion object {
|
companion object {
|
||||||
@@ -38,8 +39,12 @@ class RootSession : AutoCloseable {
|
|||||||
fun submit(command: String) = execQuiet(command).message(listOf(command))?.let { Timber.v(it) }
|
fun submit(command: String) = execQuiet(command).message(listOf(command))?.let { Timber.v(it) }
|
||||||
|
|
||||||
fun execQuiet(command: String, redirect: Boolean = false) = runBlocking {
|
fun execQuiet(command: String, redirect: Boolean = false) = runBlocking {
|
||||||
|
// Log the command to debug console
|
||||||
|
Log.d("ExecQuiet", "Executing command: $command")
|
||||||
|
|
||||||
server!!.execute(RoutingCommands.Process(listOf("sh", "-c", command), redirect))
|
server!!.execute(RoutingCommands.Process(listOf("sh", "-c", command), redirect))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun exec(command: String) = execQuiet(command).check(listOf(command))
|
fun exec(command: String) = execQuiet(command).check(listOf(command))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.net.MacAddress
|
import android.net.MacAddress
|
||||||
import android.net.wifi.SoftApConfiguration
|
import android.net.wifi.SoftApConfiguration
|
||||||
import android.net.wifi.p2p.WifiP2pConfig
|
import android.net.wifi.p2p.WifiP2pConfig
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import org.lsposed.hiddenapibypass.HiddenApiBypass
|
||||||
import me.weishu.reflection.Reflection
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The central object for accessing all the useful blocked APIs. Thanks Google!
|
* The central object for accessing all the useful blocked APIs. Thanks Google!
|
||||||
@@ -19,7 +18,7 @@ object UnblockCentral {
|
|||||||
/**
|
/**
|
||||||
* Retrieve this property before doing dangerous shit.
|
* Retrieve this property before doing dangerous shit.
|
||||||
*/
|
*/
|
||||||
private val init by lazy { if (needInit) check(Reflection.unseal(app.deviceStorage) == 0) }
|
private val init by lazy { if (needInit) check(HiddenApiBypass.setHiddenApiExemptions("")) }
|
||||||
|
|
||||||
@RequiresApi(33)
|
@RequiresApi(33)
|
||||||
fun getCountryCode(clazz: Class<*>) = init.let { clazz.getDeclaredMethod("getCountryCode") }
|
fun getCountryCode(clazz: Class<*>) = init.let { clazz.getDeclaredMethod("getCountryCode") }
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.util
|
package hanson.xyz.vpnhotspotmod.util
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
@@ -9,21 +9,22 @@ import android.net.http.ConnectionMigrationOptions
|
|||||||
import android.net.http.HttpEngine
|
import android.net.http.HttpEngine
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.RemoteException
|
import android.os.RemoteException
|
||||||
|
import android.os.ext.SdkExtensions
|
||||||
import android.text.*
|
import android.text.*
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.annotation.RequiresExtension
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.os.BuildCompat
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.databinding.BindingAdapter
|
import androidx.databinding.BindingAdapter
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
import be.mygod.vpnhotspot.App.Companion.app
|
import hanson.xyz.vpnhotspotmod.App.Companion.app
|
||||||
import be.mygod.vpnhotspot.net.MacAddressCompat
|
import hanson.xyz.vpnhotspotmod.net.MacAddressCompat
|
||||||
import be.mygod.vpnhotspot.widget.SmartSnackbar
|
import hanson.xyz.vpnhotspotmod.widget.SmartSnackbar
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
@@ -251,8 +252,8 @@ fun globalNetworkRequestBuilder() = NetworkRequest.Builder().apply {
|
|||||||
if (Build.VERSION.SDK_INT >= 31) setIncludeOtherUidNetworks(true)
|
if (Build.VERSION.SDK_INT >= 31) setIncludeOtherUidNetworks(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@get:RequiresApi(34)
|
@get:RequiresExtension(Build.VERSION_CODES.S, 7)
|
||||||
private val engine by lazy @TargetApi(34) {
|
private val engine by lazy @RequiresExtension(Build.VERSION_CODES.S, 7) {
|
||||||
val cache = File(app.deviceStorage.cacheDir, "httpEngine")
|
val cache = File(app.deviceStorage.cacheDir, "httpEngine")
|
||||||
HttpEngine.Builder(app.deviceStorage).apply {
|
HttpEngine.Builder(app.deviceStorage).apply {
|
||||||
if (cache.mkdirs() || cache.isDirectory) {
|
if (cache.mkdirs() || cache.isDirectory) {
|
||||||
@@ -267,7 +268,8 @@ private val engine by lazy @TargetApi(34) {
|
|||||||
}.build()
|
}.build()
|
||||||
}
|
}
|
||||||
suspend fun <T> connectCancellable(url: String, block: suspend (HttpURLConnection) -> T): T {
|
suspend fun <T> connectCancellable(url: String, block: suspend (HttpURLConnection) -> T): T {
|
||||||
val conn = (if (BuildCompat.isAtLeastU()) {
|
val conn = (if (Build.VERSION.SDK_INT >= 34 || Build.VERSION.SDK_INT >= Build.VERSION_CODES.S &&
|
||||||
|
SdkExtensions.getExtensionVersion(Build.VERSION_CODES.S) >= 7) {
|
||||||
engine.openConnection(URL(url))
|
engine.openConnection(URL(url))
|
||||||
} else @Suppress("BlockingMethodInNonBlockingContext") URL(url).openConnection()) as HttpURLConnection
|
} else @Suppress("BlockingMethodInNonBlockingContext") URL(url).openConnection()) as HttpURLConnection
|
||||||
return suspendCancellableCoroutine { cont ->
|
return suspendCancellableCoroutine { cont ->
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.widget
|
package hanson.xyz.vpnhotspotmod.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package be.mygod.vpnhotspot.widget
|
package hanson.xyz.vpnhotspotmod.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user