diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3dd48406..a7d8bdf9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,18 @@ android:name="android.service.quicksettings.action.QS_TILE"/> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/io/github/dovecoteescapee/byedpi/receivers/BootReceiver.kt b/app/src/main/java/io/github/dovecoteescapee/byedpi/receivers/BootReceiver.kt new file mode 100644 index 00000000..b3371fb4 --- /dev/null +++ b/app/src/main/java/io/github/dovecoteescapee/byedpi/receivers/BootReceiver.kt @@ -0,0 +1,35 @@ +package io.github.dovecoteescapee.byedpi.receivers + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.net.VpnService +import io.github.dovecoteescapee.byedpi.data.Mode +import io.github.dovecoteescapee.byedpi.services.ServiceManager +import io.github.dovecoteescapee.byedpi.utility.getPreferences +import io.github.dovecoteescapee.byedpi.utility.mode + +class BootReceiver : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val action = intent.action + if (Intent.ACTION_BOOT_COMPLETED != action + && Intent.ACTION_REBOOT != action + && "android.intent.action.QUICKBOOT_POWERON" != action + ) { + return + } + + val prefs = context.getPreferences() + + if (!prefs.getBoolean("autostart", false) || !prefs.getBoolean("was_running", false)) { + return + } + + val mode = prefs.mode() + if (prefs.mode() == Mode.VPN && VpnService.prepare(context) != null) { + return + } + + ServiceManager.start(context, mode) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/github/dovecoteescapee/byedpi/services/ServiceManager.kt b/app/src/main/java/io/github/dovecoteescapee/byedpi/services/ServiceManager.kt index 696f0b58..450e2754 100644 --- a/app/src/main/java/io/github/dovecoteescapee/byedpi/services/ServiceManager.kt +++ b/app/src/main/java/io/github/dovecoteescapee/byedpi/services/ServiceManager.kt @@ -4,9 +4,11 @@ import android.content.Context import android.content.Intent import android.util.Log import androidx.core.content.ContextCompat +import androidx.core.content.edit import io.github.dovecoteescapee.byedpi.data.Mode import io.github.dovecoteescapee.byedpi.data.START_ACTION import io.github.dovecoteescapee.byedpi.data.STOP_ACTION +import io.github.dovecoteescapee.byedpi.utility.getPreferences object ServiceManager { private val TAG: String = ServiceManager::class.java.simpleName @@ -27,6 +29,7 @@ object ServiceManager { ContextCompat.startForegroundService(context, intent) } } + context.getPreferences().edit { putBoolean("was_running", true) } } fun stop(context: Context) { @@ -46,5 +49,6 @@ object ServiceManager { ContextCompat.startForegroundService(context, intent) } } + context.getPreferences().edit { putBoolean("was_running", false) } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc263692..c4d5d287 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -72,4 +72,5 @@ HTTPS Protocols Uncheck all to desync all traffic + Autorun on system boot diff --git a/app/src/main/res/xml/main_settings.xml b/app/src/main/res/xml/main_settings.xml index e81fc6bd..e83b882a 100644 --- a/app/src/main/res/xml/main_settings.xml +++ b/app/src/main/res/xml/main_settings.xml @@ -23,6 +23,11 @@ android:defaultValue="vpn" app:useSimpleSummaryProvider="true" /> + +