Skip to content

Commit

Permalink
Merge pull request #4 from Jintin/feature/permission
Browse files Browse the repository at this point in the history
Use PermissionsDispatcher to check permission
  • Loading branch information
Jintin authored Nov 15, 2020
2 parents efae773 + 228b23b commit 1fb821f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 26 deletions.
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
}

android {
Expand Down Expand Up @@ -37,6 +38,8 @@ dependencies {
// implementation 'com.github.jintin:FancyLocationProvider:1.0'
implementation 'com.google.android.gms:play-services-location:17.1.0'
implementation 'androidx.activity:activity-ktx:1.1.0'
implementation "org.permissionsdispatcher:permissionsdispatcher:4.8.0"
kapt "org.permissionsdispatcher:permissionsdispatcher-processor:4.8.0"

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
Expand Down
34 changes: 8 additions & 26 deletions app/src/main/java/com/jintin/fancylocation/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
package com.jintin.fancylocation

import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.TextView
import androidx.activity.viewModels
import androidx.annotation.RequiresPermission
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.lifecycle.lifecycleScope
import com.jintin.fancylocation.livedata.LocationData
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import permissions.dispatcher.NeedsPermission
import permissions.dispatcher.RuntimePermissions

@RuntimePermissions
class MainActivity : AppCompatActivity() {

companion object {
const val LOCATION_REQUEST = 22

const val TYPE_LIVEDATA = 0
const val TYPE_FLOW = 1
}
Expand All @@ -30,28 +29,18 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

observeLocation()
observeLocationWithPermissionCheck()
}

override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == LOCATION_REQUEST && grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED
) {
observeLocation()
}
}

private fun observeLocation() {
if (!checkPermission()) {
requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), LOCATION_REQUEST)
return
}
) = onRequestPermissionsResult(requestCode, grantResults)

@NeedsPermission(Manifest.permission.ACCESS_FINE_LOCATION)
@RequiresPermission(anyOf = [Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION])
fun observeLocation() {
when (type) {
TYPE_LIVEDATA -> liveDataObserve()
TYPE_FLOW -> flowObserve()
Expand All @@ -61,7 +50,6 @@ class MainActivity : AppCompatActivity() {
@RequiresPermission(anyOf = [Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION])
private fun flowObserve() {
lifecycleScope.launch {

@Suppress("EXPERIMENTAL_API_USAGE")
mainViewModel.locationFlow.get().collect {
updateUI(it)
Expand All @@ -82,10 +70,4 @@ class MainActivity : AppCompatActivity() {
is LocationData.Fail -> "Fail to get location"
}
}

private fun checkPermission(): Boolean {
return ActivityCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
}
}

0 comments on commit 1fb821f

Please sign in to comment.