Fixes a crash where the write external storage permission was required

od
Laurent 6 years ago
parent 7d5f63f30b
commit d97652233b
  1. 1
      app/src/main/AndroidManifest.xml
  2. 32
      app/src/main/java/net/pokeranalytics/android/ui/activity/ImportActivity.kt
  3. 3
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/Codes.kt
  4. 21
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/PokerAnalyticsActivity.kt
  5. 3
      app/src/main/java/net/pokeranalytics/android/util/PermissionRequest.kt

@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name=".PokerAnalyticsApplication"

@ -1,5 +1,6 @@
package net.pokeranalytics.android.ui.activity
import android.Manifest
import android.content.Context
import android.content.Intent
import android.net.Uri
@ -37,7 +38,7 @@ class ImportActivity : PokerAnalyticsActivity() {
private fun getIntent(context: Context, uri: Uri): Intent {
val intent = Intent(context, ImportActivity::class.java)
intent.putExtra(ImportActivity.IntentKey.URI.keyName, uri)
intent.putExtra(IntentKey.URI.keyName, uri)
return intent
}
}
@ -48,7 +49,7 @@ class ImportActivity : PokerAnalyticsActivity() {
intent?.data?.let {
this.fileURI = it
} ?: run {
this.fileURI = intent.getParcelableExtra(ImportActivity.IntentKey.URI.keyName) as Uri
this.fileURI = intent.getParcelableExtra(IntentKey.URI.keyName) as Uri
}
setContentView(R.layout.activity_import)
@ -57,6 +58,8 @@ class ImportActivity : PokerAnalyticsActivity() {
private fun initUI() {
askForPermission(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), RequestCode.PERMISSION_WRITE_EXTERNAL_STORAGE.value) {
val fragmentTransaction = supportFragmentManager.beginTransaction()
val fragment = ImportFragment()
@ -71,30 +74,7 @@ class ImportActivity : PokerAnalyticsActivity() {
}
// override fun onNewIntent(intent: Intent?) {
// super.onNewIntent(intent)
//
// Timber.d("++++++ data = ${intent?.data}")
//
// setIntent(intent)
// intent?.let {
//
// when (intent.action) {
// "android.intent.action.VIEW" -> { // import
// val data = it.data
// if (data != null) {
// this.requestImportConfirmation(data)
// } else {
// throw PAIllegalStateException("URI null on import")
// }
// }
// else -> {
// Timber.w("Intent ${intent.action} unmanaged")
// }
// }
// }
//
// }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)

@ -12,7 +12,8 @@ enum class RequestCode(var value: Int) {
NEW_REPORT(802),
IMPORT(900),
SUBSCRIPTION(901),
CURRENCY(902)
CURRENCY(902),
PERMISSION_WRITE_EXTERNAL_STORAGE(1000)
}
enum class ResultCode(var value: Int) {

@ -14,10 +14,11 @@ import com.google.android.libraries.places.api.model.PlaceLikelihood
import io.realm.Realm
import net.pokeranalytics.android.model.realm.Location
import net.pokeranalytics.android.util.LocationManager
import net.pokeranalytics.android.util.PermissionRequest
import java.util.*
open class PokerAnalyticsActivity : AppCompatActivity() {
abstract class PokerAnalyticsActivity : AppCompatActivity() {
companion object {
const val PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 1000
@ -26,6 +27,7 @@ open class PokerAnalyticsActivity : AppCompatActivity() {
private var realm: Realm? = null
private var permissionCallback: ((granted: Boolean) -> Unit)? = null
private var permissionRequest: PermissionRequest? = null
// Lifecycle
@ -79,6 +81,15 @@ open class PokerAnalyticsActivity : AppCompatActivity() {
}
}
this.permissionRequest?.let { request ->
if (requestCode == request.code) {
val allPermissionsPresent = permissions.all { request.permissions.contains(it) }
val allGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
request.callback.invoke(allPermissionsPresent && allGranted)
}
}
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
@ -159,6 +170,14 @@ open class PokerAnalyticsActivity : AppCompatActivity() {
}
}
/**
* Ask for app permission
*/
fun askForPermission(permissions: Array<String>, requestCode: Int, permissionCallback: ((granted: Boolean) -> Unit)) {
this.permissionRequest = PermissionRequest(permissions, permissionCallback, requestCode)
ActivityCompat.requestPermissions(this, permissions, requestCode)
}
/**
* Find the current location
*/

@ -0,0 +1,3 @@
package net.pokeranalytics.android.util
class PermissionRequest(var permissions: Array<String>, var callback: ((granted: Boolean) -> Unit), var code: Int)
Loading…
Cancel
Save