This commit is contained in:
Alex Akselrod 2023-11-30 18:44:32 +08:00 committed by GitHub
commit 7985f54883
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 2 deletions

View file

@ -56,6 +56,7 @@ dependencies {
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.preference:preference-ktx:1.2.1'
implementation 'com.guolindev.permissionx:permissionx:1.7.1'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

View file

@ -1,9 +1,11 @@
package eu.neilalexander.yggdrasil
import android.Manifest
import android.app.Activity
import android.content.*
import android.graphics.Color
import android.net.VpnService
import android.os.Build
import android.os.Bundle
import android.widget.Switch
import android.widget.TextView
@ -14,6 +16,7 @@ import androidx.appcompat.widget.LinearLayoutCompat
import androidx.core.content.edit
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import com.permissionx.guolindev.PermissionX
import eu.neilalexander.yggdrasil.PacketTunnelProvider.Companion.STATE_INTENT
import mobile.Mobile
import org.json.JSONArray
@ -37,6 +40,38 @@ class MainActivity : AppCompatActivity() {
startService(intent)
}
private fun checkNotificationPermission() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
return
}
PermissionX.init(this)
.permissions(
Manifest.permission.POST_NOTIFICATIONS,
)
.onExplainRequestReason { scope, deniedList ->
scope.showRequestReasonDialog(
deniedList,
getString(R.string.explain_ntfn_perms),
getString(R.string.ok),
getString(R.string.cancel),
)
}
.onForwardToSettings { scope, deniedList ->
scope.showForwardToSettingsDialog(
deniedList,
getString(R.string.manual_ntfn_perms),
getString(R.string.ok),
getString(R.string.cancel),
)
}
.request { allGranted, _, _ ->
if (!allGranted) {
Toast.makeText(this, R.string.ntfn_denied, Toast.LENGTH_LONG).show()
}
}
}
private var startVpnActivity = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
start()
@ -65,6 +100,7 @@ class MainActivity : AppCompatActivity() {
enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
when (isChecked) {
true -> {
checkNotificationPermission()
val vpnIntent = VpnService.prepare(this)
if (vpnIntent != null) {
startVpnActivity.launch(vpnIntent)

View file

@ -42,6 +42,9 @@
<string name="settings_reset">Сброс</string>
<string name="main_status">Состояние</string>
<string name="main_enable_yggdrasil">Включить Yggdrasil</string>
<string name="explain_ntfn_perms">Пожалуйста включите нотификации чтобы видеть статус подключения Yggdrasil</string>
<string name="manual_ntfn_perms">Чтобы видеть статус подключения Yggdrasil, включите нотификации в настройках</string>
<string name="ntfn_denied">Нотификация статуса подключения Yggdrasil не будет показана</string>
<string name="main_statistics">Статистика</string>
<string name="main_not_available">Н</string>
<string name="main_ip">Адрес</string>
@ -83,4 +86,4 @@
<string name="private_key_label">Приватный ключ:</string>
<string name="set_keys">Установить свой ключ</string>
<string name="save">Сохранить</string>
</resources>
</resources>

View file

@ -42,6 +42,9 @@
<string name="settings_reset">Reset</string>
<string name="main_status">Status</string>
<string name="main_enable_yggdrasil">Enable Yggdrasil</string>
<string name="explain_ntfn_perms">Please enable notifications to easily see Yggdrasil connection status</string>
<string name="manual_ntfn_perms">To see Yggdrasil connection status, enable notifications in app settings</string>
<string name="ntfn_denied">Yggdrasil connection status notification will not be shown</string>
<string name="main_statistics">Statistics</string>
<string name="main_not_available">N/A</string>
<string name="main_ip">IP</string>
@ -83,4 +86,4 @@
<string name="private_key_label">Private key:</string>
<string name="set_keys">Set your own key</string>
<string name="save">Save</string>
</resources>
</resources>