permissions-dispatcher / PermissionsDispatcher

A declarative API to handle Android runtime permissions.
https://github.com/permissions-dispatcher/PermissionsDispatcher
Apache License 2.0
11.22k stars 1.44k forks source link

Unresolved reference: PermissionUtils #632

Closed salihyalcin closed 5 years ago

salihyalcin commented 5 years ago

Overview

build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.gislog.oss"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions{
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.arch.core:core-testing:2.0.1'
    implementation 'android.arch.lifecycle:extensions:1.1.1'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
    implementation 'com.google.android.gms:play-services-location:17.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'com.esri.arcgisruntime:arcgis-android:100.5.0'

    implementation 'org.permissionsdispatcher:permissionsdispatcher-processor:4.5.0'
    kapt 'org.permissionsdispatcher:permissionsdispatcher-processor:4.5.0'

    testİmplementation 'junit:junit:4.12'
    androidTestİmplementation 'androidx.test:runner:1.2.0'
    androidTestİmplementation 'androidx.test.espresso:espresso-core:3.2.0'
    testİmplementation "org.mockito:mockito-core:2.19.0"
    testİmplementation 'org.mockito:mockito-inline:2.13.0'
    testİmplementation "org.mockito:mockito-all:$rootProject.ext.mockitoVersion"
    testİmplementation "org.hamcrest:hamcrest-all:$rootProject.ext.hamcrestVersion"
    testİmplementation "org.powermock:powermock-module-junit4:$rootProject.ext.powerMockito"
    testİmplementation "org.powermock:powermock-api-mockito:$rootProject.ext.powerMockito"
}

MapFragment Calss

@RuntimePermissions
class MapFragment : Fragment() {

    private var baseMapControl = false
    private lateinit var trafficLayerUrl: String
    private lateinit var locationFragment: LocationFragment

    companion object {
        @JvmStatic
        fun newInstance() =
            MapFragment().apply {
            }
    }

    private lateinit var mapViewModel: MapViewModel

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_map, container, false)

        trafficLayerUrl = getString(R.string.map_traffic_url)
        mapViewModel = ViewModelProviders.of(this).get(MapViewModel::class.java)

        mapViewModel.configureMapView(context!!, view.mainMapView)
        baseMapControl = mapViewModel.setUpBaseMap(view.mainMapView, Utils.mapURL)

        mapViewModel.trafficDensityResponse.observe(this, Observer { response ->
            view.mainShowTraffic.setImageDrawable(
                ContextCompat.getDrawable(
                    context!!,
                    TrafficCongestion.getIcon(response.trafficDensity.toInt())
                )
            )
        })

        view.mainChangeBaseMap.setOnClickListener {
            baseMapControl = if (baseMapControl) {
                mapViewModel.setUpBaseMap(view.mainMapView, Utils.vectorMapURL)
            } else {
                mapViewModel.setUpBaseMap(view.mainMapView, Utils.mapURL)
            }
        }

        view.mainShowTraffic.setOnClickListener {
            mapViewModel.setUpTrafficView(view.mainMapView, trafficLayerUrl)
        }

        view.mainShowLocation.setOnClickListener {
            showUserLocationWithPermissionCheck(view.mainMapView)
        }

        return view
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        onRequestPermissionsResult(requestCode, grantResults)
    }

    @NeedsPermission(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
    fun showUserLocation(mapView: MapView) {
        try {
            locationFragment = LocationFragment.newInstance()
            fragmentManager?.beginTransaction()
                ?.add(R.id.main_container, locationFragment)
                ?.commit()

            val locationDisplay = mapView.locationDisplay
            locationDisplay.addDataSourceStatusChangedListener(LocationDisplay.DataSourceStatusChangedListener { dataSourceStatusChangedEvent ->
                if (dataSourceStatusChangedEvent.isStarted)
                    return@DataSourceStatusChangedListener
                if (dataSourceStatusChangedEvent.error == null)
                    return@DataSourceStatusChangedListener
            })
            if (!locationDisplay.isStarted)
                locationDisplay.autoPanMode = LocationDisplay.AutoPanMode.OFF
            locationDisplay.startAsync()
            if (locationDisplay.location != null) {
                mapView.setViewpointCenterAsync(locationDisplay.location.position, 5000.0)
            }
        } catch (ex: Exception) {
            ex.printStackTrace()
        }
    }

}

Environment

hotchemi commented 5 years ago

Check below.

- implementation 'org.permissionsdispatcher:permissionsdispatcher-processor:4.5.0'
+ implementation 'org.permissionsdispatcher:permissionsdispatcher:4.5.0'