diff --git a/app/build.gradle b/app/build.gradle
index 8c3f3c8..d8501cf 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -53,7 +53,6 @@ android {
dependencies {
// Own
- implementation project(":konae")
implementation(name: 'siga', ext: 'aar')
implementation "com.google.android.material:material:$materialComponentsVersion"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f47dc4e..eb8550a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,7 +5,6 @@
-
, grantResults: IntArray)
+ fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
fun onResume()
diff --git a/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsFragment.kt b/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsFragment.kt
index 6c9605f..64d7c82 100644
--- a/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsFragment.kt
+++ b/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsFragment.kt
@@ -1,5 +1,6 @@
package com.pavelrekun.rekado.screens.payload_fragment
+import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -30,8 +31,8 @@ class PayloadsFragment : Fragment() {
mvpView.initViews()
}
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
- mvpView.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ mvpView.onActivityResult(requestCode, resultCode, data)
}
@Subscribe(threadMode = ThreadMode.MAIN)
diff --git a/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsView.kt b/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsView.kt
index ad9f4ea..b4272ee 100644
--- a/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsView.kt
+++ b/app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsView.kt
@@ -1,29 +1,26 @@
package com.pavelrekun.rekado.screens.payload_fragment
-import android.Manifest
-import android.content.pm.PackageManager
+import android.app.Activity
+import android.content.Intent
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
-import com.pavelrekun.konae.Konae
-import com.pavelrekun.konae.filters.ExtensionFileFilter
import com.pavelrekun.rekado.R
import com.pavelrekun.rekado.base.BaseActivity
-import com.pavelrekun.rekado.data.Payload
import com.pavelrekun.rekado.screens.payload_fragment.adapters.PayloadsAdapter
+import com.pavelrekun.rekado.services.Constants
+import com.pavelrekun.rekado.services.Constants.KEY_OPEN_PAYLOAD
import com.pavelrekun.rekado.services.Events
import com.pavelrekun.rekado.services.Logger
import com.pavelrekun.rekado.services.dialogs.Dialogs
+import com.pavelrekun.rekado.services.extensions.extractName
+import com.pavelrekun.rekado.services.extensions.toFile
import com.pavelrekun.rekado.services.payloads.PayloadHelper
import com.pavelrekun.rekado.services.utils.MemoryUtils
-import com.pavelrekun.rekado.services.utils.PermissionsUtils
import com.pavelrekun.rekado.services.utils.SettingsUtils
import com.pavelrekun.siga.services.extensions.tintIconReverse
import kotlinx.android.synthetic.main.fragment_payloads.*
import org.greenrobot.eventbus.EventBus
-import java.io.File
-import java.io.IOException
-
class PayloadsView(private val activity: BaseActivity, private val fragment: Fragment) : PayloadsContract.View {
@@ -32,19 +29,11 @@ class PayloadsView(private val activity: BaseActivity, private val fragment: Fra
override fun initViews() {
activity.setTitle(R.string.navigation_payloads)
- prepareList()
+ initList()
initClickListeners()
initDesign()
}
- override fun prepareList() {
- if (!PermissionsUtils.checkPermissionGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- PermissionsUtils.showPermissionDialog(activity, fragment, PermissionsUtils.PERMISSIONS_GET_PAYLOADS)
- } else {
- initList()
- }
- }
-
override fun initList() {
if (!SettingsUtils.checkHideBundledEnabled()) {
MemoryUtils.copyBundledPayloads()
@@ -74,55 +63,43 @@ class PayloadsView(private val activity: BaseActivity, private val fragment: Fra
}
override fun addPayload() {
- if (!PermissionsUtils.checkPermissionGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- PermissionsUtils.showPermissionDialog(activity, fragment, PermissionsUtils.PERMISSIONS_WRITE_REQUEST_CODE)
- } else {
- getPayloadFromStorage()
- }
+ val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
+ intent.addCategory(Intent.CATEGORY_OPENABLE)
+ intent.type = Constants.MIME_BINARY
+ intent.putExtra(Intent.EXTRA_TITLE, R.string.dialog_file_chooser_payload_title)
+ fragment.startActivityForResult(intent, KEY_OPEN_PAYLOAD)
}
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
- when (requestCode) {
- PermissionsUtils.PERMISSIONS_GET_PAYLOADS -> if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- initList()
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (requestCode == KEY_OPEN_PAYLOAD) {
+ when (resultCode) {
+ Activity.RESULT_OK -> data?.data?.let {
+ val path = it.path
+ if (path != null) {
+ val name = path.extractName()
+ val inputStream = activity.contentResolver.openInputStream(it)
+
+ if (inputStream != null) {
+ inputStream.toFile("${PayloadHelper.getLocation().absolutePath}/$name")
+ EventBus.getDefault().post(Events.UpdatePayloadsListEvent())
+ Logger.info("Added new payload: $name")
+ } else {
+ Toast.makeText(activity, activity.getString(R.string.helper_error_adding_payload), Toast.LENGTH_SHORT).show()
+ Logger.error("Failed to add payload: $name")
+ }
+ activity.contentResolver.openInputStream(it)?.toFile(PayloadHelper.getLocation().absolutePath + "/" + it.path?.extractName())
+ } else {
+ Toast.makeText(activity, activity.getString(R.string.helper_error_adding_payload), Toast.LENGTH_SHORT).show()
+ Logger.error("Failed to add selected payload!")
+ }
+ }
}
- PermissionsUtils.PERMISSIONS_WRITE_REQUEST_CODE -> if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- getPayloadFromStorage()
- } else {
- Toast.makeText(activity, R.string.permission_storage_error, Toast.LENGTH_SHORT).show()
- }
- }
- }
-
- private fun getPayloadFromStorage() {
- Konae().with(activity).withChosenListener(object : Konae.Result {
- override fun onChoosePath(dirFile: File) {
- onChosenFileListener(dirFile)
- }
- }).withFileFilter(ExtensionFileFilter("bin")).onlyDirectory(false).withTitle(activity.getString(R.string.dialog_file_chooser_payload_title)).build().show()
- }
-
- private fun onChosenFileListener(pathFile: File) {
- val payload = Payload(pathFile.name, PayloadHelper.getPath(pathFile.name))
-
- if (!payload.name.contains("bin")) {
- Toast.makeText(activity, activity.getString(R.string.helper_error_file_payload_wrong), Toast.LENGTH_SHORT).show()
- }
-
- try {
- MemoryUtils.toFile(pathFile, "${PayloadHelper.getLocation()}/${payload.name}")
-
- EventBus.getDefault().post(Events.UpdatePayloadsListEvent())
- Logger.info("Added new payload: ${payload.name}")
- } catch (e: IOException) {
- e.printStackTrace()
- Logger.error("Failed to add payload: ${payload.name}")
}
}
override fun onResume() {
if (this::adapter.isInitialized) {
- prepareList()
+ initList()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/pavelrekun/rekado/screens/settings_activity/SettingsFragment.kt b/app/src/main/java/com/pavelrekun/rekado/screens/settings_activity/SettingsFragment.kt
index d84f53b..0575293 100644
--- a/app/src/main/java/com/pavelrekun/rekado/screens/settings_activity/SettingsFragment.kt
+++ b/app/src/main/java/com/pavelrekun/rekado/screens/settings_activity/SettingsFragment.kt
@@ -37,11 +37,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
addPreferencesFromResource(R.xml.preferences)
- if (!PermissionsUtils.checkPermissionGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- PermissionsUtils.showPermissionDialog(activity, this, PermissionsUtils.PERMISSIONS_WRITE_REQUEST_CODE)
- } else {
- initPayloadsCategoryPreferences()
- }
+ initPayloadsCategoryPreferences()
}
private fun initPayloadsCategoryPreferences() {
@@ -121,16 +117,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
}
}
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
- when (requestCode) {
- PermissionsUtils.PERMISSIONS_WRITE_REQUEST_CODE -> if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- initPayloadsCategoryPreferences()
- } else {
- Toast.makeText(activity, R.string.permission_storage_error, Toast.LENGTH_SHORT).show()
- }
- }
- }
-
private fun openSettingsFragment(fragment: Fragment) {
activity.supportFragmentManager?.beginTransaction()?.setCustomAnimations(R.anim.fade_in, R.anim.fade_out)?.replace(R.id.settingsFragmentFrame, fragment, fragment::class.java.simpleName)?.addToBackStack(null)?.commit()
}
diff --git a/app/src/main/java/com/pavelrekun/rekado/services/Constants.kt b/app/src/main/java/com/pavelrekun/rekado/services/Constants.kt
index d0c1a81..bb2620c 100644
--- a/app/src/main/java/com/pavelrekun/rekado/services/Constants.kt
+++ b/app/src/main/java/com/pavelrekun/rekado/services/Constants.kt
@@ -12,4 +12,8 @@ object Constants {
const val TWITTER_LINK = "https://twitter.com/menosgrante"
const val DONATE_LINK = "https://www.buymeacoffee.com/pavelrekun"
const val PRODUCT_HUNT_LINK = "https://producthunt.com/@menosgrante/made"
+
+ const val MIME_BINARY = "application/octet-stream"
+
+ const val KEY_OPEN_PAYLOAD = 123
}
\ No newline at end of file
diff --git a/app/src/main/java/com/pavelrekun/rekado/services/extensions/GenericExtensions.kt b/app/src/main/java/com/pavelrekun/rekado/services/extensions/GenericExtensions.kt
index 96e0f84..58bc19a 100644
--- a/app/src/main/java/com/pavelrekun/rekado/services/extensions/GenericExtensions.kt
+++ b/app/src/main/java/com/pavelrekun/rekado/services/extensions/GenericExtensions.kt
@@ -1,6 +1,8 @@
package com.pavelrekun.rekado.services.extensions
import android.widget.EditText
+import java.io.File
+import java.io.InputStream
fun EditText.getString(upperCase: Boolean = false): String {
return if (upperCase) {
@@ -12,4 +14,10 @@ fun EditText.getString(upperCase: Boolean = false): String {
fun EditText.isEmpty() = this.text.isEmpty()
-fun EditText.length() = this.textSize.toString().length
\ No newline at end of file
+fun InputStream.toFile(path: String) {
+ File(path).outputStream().use { this.copyTo(it) }
+}
+
+fun String.extractName(): String {
+ return this.substringAfterLast("/")
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dfed62c..d1b2b33 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -114,4 +114,5 @@
Are you sure this is correct payload file?
+ Selected payload can not be added!
diff --git a/settings.gradle b/settings.gradle
index 32adb04..e7b4def 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':konae'
+include ':app'