diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle
index 7f2a4323..4a707a8d 100644
--- a/V2rayNG/app/build.gradle
+++ b/V2rayNG/app/build.gradle
@@ -74,6 +74,7 @@ android {
viewBinding true
}
namespace 'com.v2ray.ang'
+ testNamespace 'com.v2ray.angTest'
}
dependencies {
diff --git a/V2rayNG/app/src/main/AndroidManifest.xml b/V2rayNG/app/src/main/AndroidManifest.xml
index 74ff1945..799fc968 100644
--- a/V2rayNG/app/src/main/AndroidManifest.xml
+++ b/V2rayNG/app/src/main/AndroidManifest.xml
@@ -23,6 +23,9 @@
+
+
+
= Build.VERSION_CODES.TIRAMISU) {
+ RxPermissions(this)
+ .request(Manifest.permission.POST_NOTIFICATIONS)
+ .subscribe {
+ if (!it)
+ toast(R.string.toast_permission_denied)
+ }
+ }
}
private fun setupViewModel() {
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt
index bc3785ec..883f51b5 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt
@@ -7,6 +7,7 @@ import com.google.zxing.Result
import me.dm7.barcodescanner.zxing.ZXingScannerView
import android.content.Intent
import android.graphics.BitmapFactory
+import android.os.Build
import android.view.Menu
import android.view.MenuItem
import androidx.activity.result.contract.ActivityResultContracts
@@ -70,18 +71,23 @@ class ScannerActivity : BaseActivity(), ZXingScannerView.ResultHandler {
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.select_photo -> {
+ val permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ Manifest.permission.READ_MEDIA_IMAGES
+ } else {
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ }
RxPermissions(this)
- .request(Manifest.permission.READ_EXTERNAL_STORAGE)
- .subscribe {
- if (it) {
- try {
- showFileChooser()
- } catch (e: Exception) {
- e.printStackTrace()
- }
- } else
- toast(R.string.toast_permission_denied)
- }
+ .request(permission)
+ .subscribe {
+ if (it) {
+ try {
+ showFileChooser()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ } else
+ toast(R.string.toast_permission_denied)
+ }
true
}
else -> super.onOptionsItemSelected(item)