From 22886edcb1a6cd8ff7748a38fdf6c3cb4a38d18a Mon Sep 17 00:00:00 2001 From: Alex Akselrod Date: Thu, 2 Nov 2023 10:35:25 -0700 Subject: [PATCH 1/3] request POST_NOTIFICATIONS permission --- app/build.gradle | 5 ++-- .../neilalexander/yggdrasil/MainActivity.kt | 29 +++++++++++++++++++ app/src/main/res/values-ru/strings.xml | 4 ++- app/src/main/res/values/strings.xml | 4 ++- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d1b9298..fab676a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "eu.neilalexander.yggdrasil" minSdkVersion 21 targetSdkVersion 33 - versionCode 15 - versionName "0.1-015" + versionCode 16 + versionName "0.1-016" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -55,6 +55,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' diff --git a/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt b/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt index 947dd07..e0bdbf2 100644 --- a/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt +++ b/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt @@ -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,31 @@ class MainActivity : AppCompatActivity() { startService(intent) } + private fun checkNotificationPermission() { + 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 { _, _, _ -> {} + } + } + private var startVpnActivity = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { start() @@ -65,6 +93,7 @@ class MainActivity : AppCompatActivity() { enabledSwitch.setOnCheckedChangeListener { _, isChecked -> when (isChecked) { true -> { + checkNotificationPermission() val vpnIntent = VpnService.prepare(this) if (vpnIntent != null) { startVpnActivity.launch(vpnIntent) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 35be1ee..2be6a2c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -42,6 +42,8 @@ Сброс Состояние Включить Yggdrasil + Пожалуйста включите нотификации чтобы видеть статус подключения Yggdrasil + Чтобы видеть статус подключения Yggdrasil, включите нотификации в настройках Статистика Н/Д Адрес @@ -83,4 +85,4 @@ Приватный ключ: Установить свой ключ Сохранить - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7bf2dac..02898bb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,6 +42,8 @@ Reset Status Enable Yggdrasil + Please enable notifications to easily see Yggdrasil connection status + To see Yggdrasil connection status, enable notifications in app settings Statistics N/A IP @@ -83,4 +85,4 @@ Private key: Set your own key Save - \ No newline at end of file + From d757f8d8945659e72175463d73b7980c6a39773c Mon Sep 17 00:00:00 2001 From: Alex Akselrod Date: Thu, 2 Nov 2023 11:02:47 -0700 Subject: [PATCH 2/3] gate POST_NOTIFICATIONS request behind SDK version, improve UI --- .../main/java/eu/neilalexander/yggdrasil/MainActivity.kt | 9 ++++++++- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt b/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt index e0bdbf2..fdfe4cf 100644 --- a/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt +++ b/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt @@ -41,6 +41,10 @@ class MainActivity : AppCompatActivity() { } private fun checkNotificationPermission() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + return + } + PermissionX.init(this) .permissions( Manifest.permission.POST_NOTIFICATIONS, @@ -61,7 +65,10 @@ class MainActivity : AppCompatActivity() { getString(R.string.cancel), ) } - .request { _, _, _ -> {} + .request { allGranted, _, _ -> {} + if (!allGranted) { + Toast.makeText(this, R.string.ntfn_denied, Toast.LENGTH_LONG).show() + } } } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 2be6a2c..e4bf757 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -44,6 +44,7 @@ Включить Yggdrasil Пожалуйста включите нотификации чтобы видеть статус подключения Yggdrasil Чтобы видеть статус подключения Yggdrasil, включите нотификации в настройках + Нотификация статуса подключения Yggdrasil не будет показана Статистика Н/Д Адрес diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 02898bb..8208a91 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,6 +44,7 @@ Enable Yggdrasil Please enable notifications to easily see Yggdrasil connection status To see Yggdrasil connection status, enable notifications in app settings + Yggdrasil connection status notification will not be shown Statistics N/A IP From cfb8733939edd218eea16884a402d9e1a84cd0df Mon Sep 17 00:00:00 2001 From: Alex Akselrod Date: Thu, 2 Nov 2023 13:11:12 -0700 Subject: [PATCH 3/3] fix lint message about unused lambda expression --- app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt b/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt index fdfe4cf..1e6c65d 100644 --- a/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt +++ b/app/src/main/java/eu/neilalexander/yggdrasil/MainActivity.kt @@ -65,7 +65,7 @@ class MainActivity : AppCompatActivity() { getString(R.string.cancel), ) } - .request { allGranted, _, _ -> {} + .request { allGranted, _, _ -> if (!allGranted) { Toast.makeText(this, R.string.ntfn_denied, Toast.LENGTH_LONG).show() }