Skip to content

Commit 6bc5423

Browse files
committed
Improved permission requests from settings panel
1 parent ecf2efc commit 6bc5423

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ android {
5050

5151
compileSdkVersion 30
5252

53-
def appVersionCode = 138
53+
def appVersionCode = 139
5454
def appVersionName = "positional_build_${appVersionCode}_final"
5555

5656
defaultConfig {

app/src/main/java/app/simple/positional/ui/panels/AppSettings.kt

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import android.content.res.ColorStateList
1010
import android.net.Uri
1111
import android.os.Bundle
1212
import android.provider.Settings
13+
import android.util.Log
1314
import android.view.*
1415
import android.widget.TextView
1516
import android.widget.Toast
17+
import androidx.activity.result.ActivityResultLauncher
18+
import androidx.activity.result.contract.ActivityResultContracts
1619
import androidx.appcompat.app.AppCompatDelegate
17-
import androidx.core.app.ActivityCompat
1820
import app.simple.positional.R
1921
import app.simple.positional.activities.fragment.ScopedFragment
2022
import 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?) {

app/src/main/java/app/simple/positional/ui/subpanels/CustomLocation.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import app.simple.positional.activities.fragment.ScopedFragment
2727
import app.simple.positional.activities.subactivity.WebPageViewerActivity
2828
import app.simple.positional.adapters.settings.LocationsAdapter
2929
import app.simple.positional.database.instances.LocationDatabase
30+
import app.simple.positional.decorations.padding.PaddingAwareLinearLayout
3031
import app.simple.positional.decorations.popup.PopupLinearLayout
3132
import app.simple.positional.decorations.ripple.DynamicRippleImageButton
3233
import app.simple.positional.model.Locations
@@ -53,7 +54,7 @@ class CustomLocation : ScopedFragment() {
5354
private lateinit var addressInputEditText: EditText
5455
private lateinit var latitudeInputEditText: EditText
5556
private lateinit var longitudeInputEditText: EditText
56-
private lateinit var inputLayoutsContainer: LinearLayout
57+
private lateinit var inputLayoutsContainer: PaddingAwareLinearLayout
5758

5859
private lateinit var locationsAdapter: LocationsAdapter
5960
private lateinit var itemTouchHelper: ItemTouchHelper

app/src/main/res/layout/fragment_custom_location.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<app.simple.positional.decorations.padding.PaddingAwareLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
77
android:orientation="vertical">
88

9-
<LinearLayout
9+
<app.simple.positional.decorations.padding.PaddingAwareLinearLayout
1010
android:id="@+id/custom_location_input_container"
1111
android:layout_width="match_parent"
1212
android:layout_height="wrap_content"
@@ -177,7 +177,7 @@
177177
android:layout_marginTop="10dp"
178178
android:background="@color/dividerColor" />
179179

180-
</LinearLayout>
180+
</app.simple.positional.decorations.padding.PaddingAwareLinearLayout>
181181

182182
<FrameLayout
183183
android:layout_width="match_parent"
@@ -203,4 +203,4 @@
203203

204204
</FrameLayout>
205205

206-
</app.simple.positional.decorations.padding.PaddingAwareLinearLayout>
206+
</LinearLayout>

app/src/main/res/layout/fragment_settings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
android:layout_marginEnd="16dp"
8585
android:layout_weight="1"
8686
android:fontFamily="@font/medium"
87-
android:text="@string/location_permission_denied"
87+
android:text="@string/no_location_permission_alert"
8888
android:textColor="@android:color/white"
8989
android:textSize="@dimen/settings_secondary_text_size" />
9090

0 commit comments

Comments
 (0)