Skip to content

Instantly share code, notes, and snippets.

@stevdza-san
Last active April 11, 2023 09:18
Show Gist options
  • Save stevdza-san/5f68c250121d59b7a7286d1ce950731f to your computer and use it in GitHub Desktop.
Save stevdza-san/5f68c250121d59b7a7286d1ce950731f to your computer and use it in GitHub Desktop.
For my Easy Permissions video tutorial
import android.Manifest
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.example.testapp.databinding.FragmentFirstBinding
import com.vmadalin.easypermissions.EasyPermissions
import com.vmadalin.easypermissions.dialogs.SettingsDialog
class FirstFragment : Fragment(), EasyPermissions.PermissionCallbacks {
companion object {
const val PERMISSION_LOCATION_REQUEST_CODE = 1
}
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
_binding = FragmentFirstBinding.inflate(inflater, container, false)
setViewVisibility()
binding.button.setOnClickListener {
requestLocationPermission()
}
return binding.root
}
private fun hasLocationPermission() =
EasyPermissions.hasPermissions(
requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION
)
private fun requestLocationPermission() {
EasyPermissions.requestPermissions(
this,
"This application cannot work without Location Permission.",
PERMISSION_LOCATION_REQUEST_CODE,
Manifest.permission.ACCESS_FINE_LOCATION
)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
}
override fun onPermissionsDenied(requestCode: Int, perms: List<String>) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms.first())) {
SettingsDialog.Builder(requireActivity()).build().show()
} else {
requestLocationPermission()
}
}
override fun onPermissionsGranted(requestCode: Int, perms: List<String>) {
Toast.makeText(
requireContext(),
"Permission Granted!",
Toast.LENGTH_SHORT
).show()
setViewVisibility()
}
private fun setViewVisibility() {
if (hasLocationPermission()) {
binding.textView.visibility = View.VISIBLE
binding.button.visibility = View.GONE
} else {
binding.textView.visibility = View.GONE
binding.button.visibility = View.VISIBLE
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
@dryland41
Copy link

You forgot to mention to enable support for view binding. I'm new to Android so it wasn't obvious to me what was goin on when the IDE didn't recognize the FragmentFirstBinding class.

https://dev.to/theimpulson/working-with-view-binding-in-android-using-kotlin-27gn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment