mirror of
https://github.com/MenosGrante/Rekado
synced 2025-10-05 23:22:39 +02:00
- Updated: Rekado now uses Storage Access Framework to select payloads from storage.
- Updated: Hekate to 5.0.0.
This commit is contained in:
@@ -53,7 +53,6 @@ android {
|
||||
|
||||
dependencies {
|
||||
// Own
|
||||
implementation project(":konae")
|
||||
implementation(name: 'siga', ext: 'aar')
|
||||
|
||||
implementation "com.google.android.material:material:$materialComponentsVersion"
|
||||
|
@@ -5,7 +5,6 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.REORDER_TASKS" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:name=".RekadoApplication"
|
||||
|
Binary file not shown.
@@ -1,24 +1,24 @@
|
||||
package com.pavelrekun.rekado.screens.payload_fragment
|
||||
|
||||
import android.content.Intent
|
||||
|
||||
interface PayloadsContract {
|
||||
|
||||
interface View {
|
||||
|
||||
fun initViews()
|
||||
|
||||
fun prepareList()
|
||||
|
||||
fun initList()
|
||||
|
||||
fun initDesign()
|
||||
|
||||
fun updateList()
|
||||
|
||||
fun initClickListeners()
|
||||
|
||||
fun updateList()
|
||||
|
||||
fun addPayload()
|
||||
|
||||
fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray)
|
||||
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
|
||||
|
||||
fun onResume()
|
||||
|
||||
|
@@ -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<out String>, 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)
|
||||
|
@@ -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<out String>, 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()
|
||||
}
|
||||
}
|
||||
}
|
@@ -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<out String>, 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()
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
@@ -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
|
||||
fun InputStream.toFile(path: String) {
|
||||
File(path).outputStream().use { this.copyTo(it) }
|
||||
}
|
||||
|
||||
fun String.extractName(): String {
|
||||
return this.substringAfterLast("/")
|
||||
}
|
@@ -114,4 +114,5 @@
|
||||
|
||||
<!-- Strings for Helper -->
|
||||
<string name="helper_error_file_payload_wrong">Are you sure this is correct payload file?</string>
|
||||
<string name="helper_error_adding_payload">Selected payload can not be added!</string>
|
||||
</resources>
|
||||
|
@@ -1 +1 @@
|
||||
include ':app', ':konae'
|
||||
include ':app'
|
||||
|
Reference in New Issue
Block a user