mirror of
				https://github.com/yggdrasil-network/yggdrasil-android.git
				synced 2025-11-04 03:05:08 +03:00 
			
		
		
		
	request POST_NOTIFICATIONS permission
This commit is contained in:
		
							parent
							
								
									8dfa2f638a
								
							
						
					
					
						commit
						22886edcb1
					
				
					 4 changed files with 38 additions and 4 deletions
				
			
		| 
						 | 
					@ -10,8 +10,8 @@ android {
 | 
				
			||||||
        applicationId "eu.neilalexander.yggdrasil"
 | 
					        applicationId "eu.neilalexander.yggdrasil"
 | 
				
			||||||
        minSdkVersion 21
 | 
					        minSdkVersion 21
 | 
				
			||||||
        targetSdkVersion 33
 | 
					        targetSdkVersion 33
 | 
				
			||||||
        versionCode 15
 | 
					        versionCode 16
 | 
				
			||||||
        versionName "0.1-015"
 | 
					        versionName "0.1-016"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 | 
					        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -55,6 +55,7 @@ dependencies {
 | 
				
			||||||
    implementation 'com.google.android.material:material:1.5.0'
 | 
					    implementation 'com.google.android.material:material:1.5.0'
 | 
				
			||||||
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 | 
					    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 | 
				
			||||||
    implementation 'androidx.preference:preference-ktx:1.2.1'
 | 
					    implementation 'androidx.preference:preference-ktx:1.2.1'
 | 
				
			||||||
 | 
					    implementation 'com.guolindev.permissionx:permissionx:1.7.1'
 | 
				
			||||||
    testImplementation 'junit:junit:4.+'
 | 
					    testImplementation 'junit:junit:4.+'
 | 
				
			||||||
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
 | 
					    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
 | 
				
			||||||
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
 | 
					    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,11 @@
 | 
				
			||||||
package eu.neilalexander.yggdrasil
 | 
					package eu.neilalexander.yggdrasil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.Manifest
 | 
				
			||||||
import android.app.Activity
 | 
					import android.app.Activity
 | 
				
			||||||
import android.content.*
 | 
					import android.content.*
 | 
				
			||||||
import android.graphics.Color
 | 
					import android.graphics.Color
 | 
				
			||||||
import android.net.VpnService
 | 
					import android.net.VpnService
 | 
				
			||||||
 | 
					import android.os.Build
 | 
				
			||||||
import android.os.Bundle
 | 
					import android.os.Bundle
 | 
				
			||||||
import android.widget.Switch
 | 
					import android.widget.Switch
 | 
				
			||||||
import android.widget.TextView
 | 
					import android.widget.TextView
 | 
				
			||||||
| 
						 | 
					@ -14,6 +16,7 @@ import androidx.appcompat.widget.LinearLayoutCompat
 | 
				
			||||||
import androidx.core.content.edit
 | 
					import androidx.core.content.edit
 | 
				
			||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
 | 
					import androidx.localbroadcastmanager.content.LocalBroadcastManager
 | 
				
			||||||
import androidx.preference.PreferenceManager
 | 
					import androidx.preference.PreferenceManager
 | 
				
			||||||
 | 
					import com.permissionx.guolindev.PermissionX
 | 
				
			||||||
import eu.neilalexander.yggdrasil.PacketTunnelProvider.Companion.STATE_INTENT
 | 
					import eu.neilalexander.yggdrasil.PacketTunnelProvider.Companion.STATE_INTENT
 | 
				
			||||||
import mobile.Mobile
 | 
					import mobile.Mobile
 | 
				
			||||||
import org.json.JSONArray
 | 
					import org.json.JSONArray
 | 
				
			||||||
| 
						 | 
					@ -37,6 +40,31 @@ class MainActivity : AppCompatActivity() {
 | 
				
			||||||
        startService(intent)
 | 
					        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 ->
 | 
					    private var startVpnActivity = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
 | 
				
			||||||
        if (result.resultCode == Activity.RESULT_OK) {
 | 
					        if (result.resultCode == Activity.RESULT_OK) {
 | 
				
			||||||
           start()
 | 
					           start()
 | 
				
			||||||
| 
						 | 
					@ -65,6 +93,7 @@ class MainActivity : AppCompatActivity() {
 | 
				
			||||||
        enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
 | 
					        enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
 | 
				
			||||||
            when (isChecked) {
 | 
					            when (isChecked) {
 | 
				
			||||||
                true -> {
 | 
					                true -> {
 | 
				
			||||||
 | 
					                    checkNotificationPermission()
 | 
				
			||||||
                    val vpnIntent = VpnService.prepare(this)
 | 
					                    val vpnIntent = VpnService.prepare(this)
 | 
				
			||||||
                    if (vpnIntent != null) {
 | 
					                    if (vpnIntent != null) {
 | 
				
			||||||
                        startVpnActivity.launch(vpnIntent)
 | 
					                        startVpnActivity.launch(vpnIntent)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,8 @@
 | 
				
			||||||
    <string name="settings_reset">Сброс</string>
 | 
					    <string name="settings_reset">Сброс</string>
 | 
				
			||||||
    <string name="main_status">Состояние</string>
 | 
					    <string name="main_status">Состояние</string>
 | 
				
			||||||
    <string name="main_enable_yggdrasil">Включить Yggdrasil</string>
 | 
					    <string name="main_enable_yggdrasil">Включить Yggdrasil</string>
 | 
				
			||||||
 | 
					    <string name="explain_ntfn_perms">Пожалуйста включите нотификации чтобы видеть статус подключения Yggdrasil</string>
 | 
				
			||||||
 | 
					    <string name="manual_ntfn_perms">Чтобы видеть статус подключения Yggdrasil, включите нотификации в настройках</string>
 | 
				
			||||||
    <string name="main_statistics">Статистика</string>
 | 
					    <string name="main_statistics">Статистика</string>
 | 
				
			||||||
    <string name="main_not_available">Н/Д</string>
 | 
					    <string name="main_not_available">Н/Д</string>
 | 
				
			||||||
    <string name="main_ip">Адрес</string>
 | 
					    <string name="main_ip">Адрес</string>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,8 @@
 | 
				
			||||||
    <string name="settings_reset">Reset</string>
 | 
					    <string name="settings_reset">Reset</string>
 | 
				
			||||||
    <string name="main_status">Status</string>
 | 
					    <string name="main_status">Status</string>
 | 
				
			||||||
    <string name="main_enable_yggdrasil">Enable Yggdrasil</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="main_statistics">Statistics</string>
 | 
					    <string name="main_statistics">Statistics</string>
 | 
				
			||||||
    <string name="main_not_available">N/A</string>
 | 
					    <string name="main_not_available">N/A</string>
 | 
				
			||||||
    <string name="main_ip">IP</string>
 | 
					    <string name="main_ip">IP</string>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue