@@ -10,11 +10,13 @@ import android.content.res.ColorStateList
1010import android.net.Uri
1111import android.os.Bundle
1212import android.provider.Settings
13+ import android.util.Log
1314import android.view.*
1415import android.widget.TextView
1516import android.widget.Toast
17+ import androidx.activity.result.ActivityResultLauncher
18+ import androidx.activity.result.contract.ActivityResultContracts
1619import androidx.appcompat.app.AppCompatDelegate
17- import androidx.core.app.ActivityCompat
1820import app.simple.positional.R
1921import app.simple.positional.activities.fragment.ScopedFragment
2022import app.simple.positional.activities.subactivity.AccentColorsActivity
@@ -81,6 +83,29 @@ class AppSettings : ScopedFragment(), CoordinatesCallback, PopupMenuCallback {
8183 private lateinit var currentLocationProvider: TextView
8284 private lateinit var foundIssues: TextView
8385
86+ private lateinit var permissionContracts: ActivityResultLauncher <Array <String >>
87+ private var opened = false
88+
89+ override fun onCreate (savedInstanceState : Bundle ? ) {
90+ super .onCreate(savedInstanceState)
91+
92+ permissionContracts = registerForActivityResult(ActivityResultContracts .RequestMultiplePermissions ()) { mutableMap ->
93+ mutableMap.entries.forEach {
94+ if (it.value) {
95+ Log .d(" Permissions" , " ${it.key} : ${it.value} " )
96+ } else {
97+ if (! opened) {
98+ startActivity(Intent (Settings .ACTION_APPLICATION_DETAILS_SETTINGS ).apply {
99+ data = Uri .fromParts(" package" , requireActivity().packageName, null )
100+ })
101+
102+ opened = true
103+ }
104+ }
105+ }
106+ }
107+ }
108+
84109 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View ? {
85110 val view = inflater.inflate(R .layout.fragment_settings, container, false )
86111
@@ -283,16 +308,13 @@ class AppSettings : ScopedFragment(), CoordinatesCallback, PopupMenuCallback {
283308 }
284309
285310 permission.setOnClickListener {
286- if (ActivityCompat .shouldShowRequestPermissionRationale(requireActivity(), Manifest .permission.ACCESS_FINE_LOCATION ) &&
287- ActivityCompat .shouldShowRequestPermissionRationale(requireActivity(), Manifest .permission.ACCESS_COARSE_LOCATION )) {
288- ActivityCompat .requestPermissions(requireActivity(), arrayOf(
289- Manifest .permission.ACCESS_COARSE_LOCATION ,
290- Manifest .permission.ACCESS_FINE_LOCATION
291- ), 123 )
311+ if (PermissionUtils .checkPermission(requireContext())) {
312+ permissionNotification()
292313 } else {
293- startActivity(Intent (Settings .ACTION_APPLICATION_DETAILS_SETTINGS ).apply {
294- data = Uri .fromParts(" package" , requireActivity().packageName, null )
295- })
314+ permissionContracts.launch(
315+ arrayOf(
316+ Manifest .permission.ACCESS_COARSE_LOCATION ,
317+ Manifest .permission.ACCESS_FINE_LOCATION ))
296318 }
297319 }
298320 }
@@ -407,6 +429,7 @@ class AppSettings : ScopedFragment(), CoordinatesCallback, PopupMenuCallback {
407429 super .onResume()
408430 toggleCustomLocation.isChecked = MainPreferences .isCustomCoordinate()
409431 permissionNotification()
432+ opened = false
410433 }
411434
412435 override fun onSharedPreferenceChanged (sharedPreferences : SharedPreferences ? , key : String? ) {
0 commit comments