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