mirror of https://github.com/tasks/tasks
Target Android 11
parent
63c914b493
commit
be68fb774b
@ -0,0 +1,101 @@
|
|||||||
|
package org.tasks.location
|
||||||
|
|
||||||
|
import android.app.Activity.RESULT_OK
|
||||||
|
import android.app.Dialog
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.provider.Settings
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.DialogFragment
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import com.todoroo.andlib.utility.AndroidUtilities.atLeastR
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import org.tasks.BuildConfig
|
||||||
|
import org.tasks.PermissionUtil.verifyPermissions
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.databinding.DialogLocationPermissionsBinding
|
||||||
|
import org.tasks.dialogs.DialogBuilder
|
||||||
|
import org.tasks.preferences.FragmentPermissionRequestor
|
||||||
|
import org.tasks.preferences.PermissionChecker
|
||||||
|
import org.tasks.preferences.PermissionRequestor.REQUEST_BACKGROUND_LOCATION
|
||||||
|
import timber.log.Timber
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
|
class LocationPermissionDialog : DialogFragment() {
|
||||||
|
|
||||||
|
@Inject lateinit var dialogBuilder: DialogBuilder
|
||||||
|
@Inject lateinit var permissionChecker: PermissionChecker
|
||||||
|
@Inject lateinit var permissionRequestor: FragmentPermissionRequestor
|
||||||
|
|
||||||
|
lateinit var binding: DialogLocationPermissionsBinding
|
||||||
|
|
||||||
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
|
binding = DialogLocationPermissionsBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
|
if (atLeastR()) {
|
||||||
|
binding.foregroundLocation.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.foregroundLocation.setOnCheckedChangeListener { _, isChecked ->
|
||||||
|
if (isChecked) {
|
||||||
|
permissionRequestor.requestForegroundLocation()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.backgroundLocation.setOnCheckedChangeListener { _, isChecked ->
|
||||||
|
if (isChecked) {
|
||||||
|
permissionRequestor.requestBackgroundLocation()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dialogBuilder.newDialog(R.string.missing_permissions)
|
||||||
|
.setView(binding.root)
|
||||||
|
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
.setNeutralButton(R.string.TLA_menu_settings) { _, _ ->
|
||||||
|
startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
|
||||||
|
addCategory(Intent.CATEGORY_DEFAULT)
|
||||||
|
data = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
|
||||||
|
if (atLeastR()) {
|
||||||
|
binding.foregroundLocation.isChecked = permissionChecker.canAccessForegroundLocation()
|
||||||
|
binding.foregroundLocation.isClickable = !binding.foregroundLocation.isChecked
|
||||||
|
binding.backgroundLocation.isEnabled = binding.foregroundLocation.isChecked
|
||||||
|
}
|
||||||
|
binding.backgroundLocation.isChecked = permissionChecker.canAccessBackgroundLocation()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||||
|
Timber.d("onRequestPermissionResult(requestCode = $requestCode, permissions = [${permissions.joinToString()}], grantResults = [${grantResults.joinToString()}])")
|
||||||
|
when(requestCode) {
|
||||||
|
REQUEST_BACKGROUND_LOCATION -> {
|
||||||
|
if (verifyPermissions(grantResults)) {
|
||||||
|
targetFragment?.onActivityResult(targetRequestCode, RESULT_OK, null)
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newLocationPermissionDialog(
|
||||||
|
targetFragment: Fragment,
|
||||||
|
rc: Int
|
||||||
|
): LocationPermissionDialog {
|
||||||
|
val dialog = LocationPermissionDialog()
|
||||||
|
dialog.setTargetFragment(targetFragment, rc)
|
||||||
|
return dialog
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="@dimen/keyline_first">
|
||||||
|
<TextView
|
||||||
|
style="@style/TextAppearance"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/background_location_permission_required" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
style="@style/TextAppearance"
|
||||||
|
android:id="@+id/foreground_location"
|
||||||
|
android:paddingTop="@dimen/keyline_first"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:text="@string/foreground_location" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
|
style="@style/TextAppearance"
|
||||||
|
android:id="@+id/background_location"
|
||||||
|
android:paddingTop="@dimen/keyline_first"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/background_location" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
Loading…
Reference in New Issue