Skip to content

Commit

Permalink
- Added "Auto injector" option to inject payloads without need to sel…
Browse files Browse the repository at this point in the history
…ect paylaod

- Added method to completely clean logs
- Updated Russian localization
  • Loading branch information
Pavel Rekun committed Jul 12, 2018
1 parent d78ab58 commit 6df7954
Show file tree
Hide file tree
Showing 24 changed files with 366 additions and 202 deletions.
4 changes: 2 additions & 2 deletions app/src/main/java/com/pavelrekun/rekado/RekadoApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.pavelrekun.rekado
import android.annotation.SuppressLint
import android.app.Application
import android.support.v7.app.AppCompatDelegate
import com.pavelrekun.rekado.services.logs.Logger
import com.pavelrekun.rekado.services.logs.LogHelper
import com.pavelrekun.rekado.services.payloads.PayloadHelper
import io.paperdb.Paper

Expand All @@ -25,7 +25,7 @@ class RekadoApplication : Application() {

Paper.init(this)

Logger.init()
LogHelper.init()
PayloadHelper.init()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ interface LogsContract {

fun initList()

fun initClickListeners()

}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.pavelrekun.rekado.screens.logs_fragment

import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import com.pavelrekun.rekado.R
import com.pavelrekun.rekado.base.BaseActivity
import com.pavelrekun.rekado.screens.logs_fragment.adapters.LogsAdapter
import com.pavelrekun.rekado.services.logs.Logger
import com.pavelrekun.rekado.services.logs.LogHelper
import kotlinx.android.synthetic.main.fragment_logs.*

class LogsView(private val activity: BaseActivity) : LogsContract.View {
Expand All @@ -15,13 +16,31 @@ class LogsView(private val activity: BaseActivity) : LogsContract.View {
activity.setTitle(R.string.navigation_logs)

initList()
initClickListeners()
}

override fun initList() {
adapter = LogsAdapter(Logger.getLogs())
adapter = LogsAdapter(LogHelper.getLogs())

activity.logsActionsList.setHasFixedSize(true)
activity.logsActionsList.layoutManager = LinearLayoutManager(activity)
activity.logsActionsList.adapter = adapter

activity.logsActionsList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
if (dy > 0) activity.logsClearButton.hide()
else if (dy < 0) activity.logsClearButton.show()
}
})
}

override fun initClickListeners() {
activity.logsClearButton.setOnClickListener {
LogHelper.clearLogs()

if (this::adapter.isInitialized) {
adapter.updateList()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,20 @@ import android.view.ViewGroup
import com.pavelrekun.rekado.R
import com.pavelrekun.rekado.RekadoApplication
import com.pavelrekun.rekado.data.Log
import com.pavelrekun.rekado.services.logs.LogHelper
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.item_log.*

class LogsAdapter(var data: MutableList<Log>) : RecyclerView.Adapter<LogsAdapter.ViewHolder>() {

override fun getItemCount() = data.size

fun updateList() {
this.data = LogHelper.getLogs()

notifyDataSetChanged()
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(data[position])
}
Expand All @@ -24,7 +31,6 @@ class LogsAdapter(var data: MutableList<Log>) : RecyclerView.Adapter<LogsAdapter
return ViewHolder(itemView)
}


class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView), LayoutContainer {

fun bind(log: Log) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ 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.eventbus.Events
import com.pavelrekun.rekado.services.logs.Logger
import com.pavelrekun.rekado.services.logs.LogHelper
import com.pavelrekun.rekado.services.payloads.PayloadHelper
import com.pavelrekun.rekado.services.utils.FilesHelper
import com.pavelrekun.rekado.services.utils.PermissionsUtils
Expand Down Expand Up @@ -45,7 +45,7 @@ class PayloadsView(private val activity: BaseActivity, private val fragment: Fra
override fun initList() {
FilesHelper.copyAsset()

adapter = PayloadsAdapter(PayloadHelper.getPayloads())
adapter = PayloadsAdapter(PayloadHelper.getAll())

activity.payloadsList.setHasFixedSize(true)
activity.payloadsList.layoutManager = LinearLayoutManager(activity)
Expand All @@ -54,7 +54,7 @@ class PayloadsView(private val activity: BaseActivity, private val fragment: Fra

override fun updateList() {
if (this::adapter.isInitialized) {
adapter.updateList(PayloadHelper.getPayloads())
adapter.updateList()
}
}

Expand Down Expand Up @@ -105,10 +105,10 @@ class PayloadsView(private val activity: BaseActivity, private val fragment: Fra
pathFile.toFile(PayloadHelper.FOLDER_PATH + "/" + payload.name)

EventBus.getDefault().postSticky(Events.UpdateListEvent())
Logger.log(1, "Added new payload: ${payload.name}")
LogHelper.log(1, "Added new payload: ${payload.name}")
} catch (e: IOException) {
e.printStackTrace()
Logger.log(0, "Failed to add payload: ${payload.name}")
LogHelper.log(0, "Failed to add payload: ${payload.name}")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import android.view.ViewGroup
import com.pavelrekun.rekado.R
import com.pavelrekun.rekado.data.Payload
import com.pavelrekun.rekado.services.eventbus.Events
import com.pavelrekun.rekado.services.logs.Logger
import com.pavelrekun.rekado.services.logs.LogHelper
import com.pavelrekun.rekado.services.payloads.PayloadHelper
import com.pavelrekun.rekado.services.utils.FilesHelper
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.item_payload.*
Expand All @@ -17,8 +18,8 @@ class PayloadsAdapter(var data: MutableList<Payload>) : RecyclerView.Adapter<Pay

override fun getItemCount() = data.size

fun updateList(data: MutableList<Payload>) {
this.data = data
fun updateList() {
this.data = PayloadHelper.getAll()

notifyDataSetChanged()
}
Expand All @@ -37,12 +38,12 @@ class PayloadsAdapter(var data: MutableList<Payload>) : RecyclerView.Adapter<Pay
fun bind(payload: Payload) {
itemPayloadName.text = payload.name

itemPayloadRemove.visibility = if (payload.name == "sx_loader.bin") View.GONE else View.VISIBLE
itemPayloadRemove.visibility = if (payload.name == PayloadHelper.BASIC_PAYLOAD_NAME) View.GONE else View.VISIBLE

itemPayloadRemove.setOnClickListener {
FilesHelper.removeFile(payload.path)
EventBus.getDefault().postSticky(Events.UpdateListEvent())
Logger.log(1, "Payload ${payload.name} deleted!")
LogHelper.log(1, "Payload ${payload.name} deleted!")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@ package com.pavelrekun.rekado.screens.settings_activity

import android.app.AlertDialog
import android.os.Bundle
import android.support.v7.preference.CheckBoxPreference
import android.support.v7.preference.ListPreference
import android.support.v7.preference.PreferenceFragmentCompat
import com.pavelrekun.rekado.R
import com.pavelrekun.rekado.base.BaseActivity
import com.pavelrekun.rekado.services.dialogs.Dialogs
import com.pavelrekun.rekado.services.logs.LogHelper
import com.pavelrekun.rekado.services.payloads.PayloadHelper
import com.pavelrekun.rekado.services.utils.SettingsUtils

class SettingsFragment : PreferenceFragmentCompat() {

Expand All @@ -19,12 +23,44 @@ class SettingsFragment : PreferenceFragmentCompat() {
private fun initPayloadsCategoryPreferences() {
val payloadsResetPreference = findPreference("payloads_reset")

val autoInjectorEnable = findPreference("auto_injector_enable") as CheckBoxPreference
val autoInjectorPayload = findPreference("auto_injector_payload") as ListPreference

autoInjectorEnable.setTitle(if (autoInjectorEnable.isChecked) R.string.settings_auto_injector_status_title_enabled else R.string.settings_auto_injector_status_title_disabled)

autoInjectorPayload.entryValues = PayloadHelper.getNames().toTypedArray()
autoInjectorPayload.entries = PayloadHelper.getNames().toTypedArray()
if (autoInjectorPayload.value == null) autoInjectorPayload.setValueIndex(0)
autoInjectorPayload.isEnabled = autoInjectorEnable.isChecked

autoInjectorEnable.setOnPreferenceChangeListener { _, newValue ->
autoInjectorPayload.isEnabled = newValue as Boolean

if (newValue) {
LogHelper.log(1, "\"Auto injector\" enabled!")
autoInjectorEnable.setTitle(R.string.settings_auto_injector_status_title_enabled)
} else {
LogHelper.log(1, "\"Auto injector\" disabled!")
autoInjectorEnable.setTitle(R.string.settings_auto_injector_status_title_disabled)
}

SettingsUtils.updateAutoInjectorEnabled(newValue)
true
}

autoInjectorPayload.setOnPreferenceChangeListener { _, newValue ->
SettingsUtils.updateAutoInjectorPayload(newValue.toString())
true
}

payloadsResetPreference.setOnPreferenceClickListener {
val dialog = Dialogs.showPayloadsResetDialog(activity as BaseActivity)

dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
PayloadHelper.deletePayloads()
PayloadHelper.clearFolder()
dialog.dismiss()

LogHelper.log(1, "Payloads database cleaned!")
}
true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ object Dialogs {
.backgroundColorRes(R.color.colorPrimary)
.contentColorAttr(android.R.attr.textColorSecondary)
.titleColorRes(R.color.colorAccent)
.items(PayloadHelper.getPayloadTitles())
.items(PayloadHelper.getNames())
.itemsCallback { dialog, _, _, name ->
PayloadHelper.putChosenPayload(PayloadHelper.findPayload(name.toString()) as Payload)
PayloadHelper.putChosen(PayloadHelper.find(name.toString()) as Payload)
dialog.hide()
}
.dismissListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.pavelrekun.rekado.services.logs
import com.pavelrekun.rekado.data.Log
import io.paperdb.Paper

object Logger {
object LogHelper {

private const val LOGS_LIST_KEY = "LOGS_LIST_KEY"

Expand All @@ -27,4 +27,10 @@ object Logger {
private fun saveLogs() {
Paper.book().write(LOGS_LIST_KEY, logsList)
}

fun clearLogs() {
logsList.clear()

init()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import java.io.File
object PayloadHelper {

val FOLDER_PATH = "${Environment.getExternalStorageDirectory()}/Rekado/"
const val BASIC_PAYLOAD_NAME = "sx_loader.bin"

private const val CHOSEN_PAYLOAD = "CHOSEN_PAYLOAD"

Expand All @@ -19,7 +20,7 @@ object PayloadHelper {
if (!folderFile.exists()) folderFile.mkdir()
}

fun getPayloads(): MutableList<Payload> {
fun getAll(): MutableList<Payload> {
val payloads: MutableList<Payload> = ArrayList()

File(FOLDER_PATH).listFiles().forEach {
Expand All @@ -31,18 +32,18 @@ object PayloadHelper {
return payloads
}

fun deletePayloads() {
fun clearFolder() {
File(FOLDER_PATH).listFiles().forEach {
if (it.nameWithoutExtension != "sx_loader") {
if (it.name != BASIC_PAYLOAD_NAME) {
it.delete()
}
}
}

fun getPayloadTitles(): MutableList<String> {
fun getNames(): MutableList<String> {
val payloads: MutableList<String> = ArrayList()

for (payload in getPayloads()) {
for (payload in getAll()) {
payloads.add(payload.name)
}

Expand All @@ -57,8 +58,8 @@ object PayloadHelper {
return "$FOLDER_PATH/$name"
}

fun findPayload(name: String): Payload? {
for (payload in getPayloads()) {
fun find(name: String): Payload? {
for (payload in getAll()) {
if (payload.name == name) {
return payload
}
Expand All @@ -67,16 +68,16 @@ object PayloadHelper {
return null
}

fun putChosenPayload(payload: Payload) {
fun putChosen(payload: Payload) {
Paper.book().write(CHOSEN_PAYLOAD, payload)
EventBus.getDefault().postSticky(Events.PayloadSelected())
}

fun getChosenPayload(): Payload {
fun getChosen(): Payload {
return Paper.book().read(CHOSEN_PAYLOAD)
}

fun removeChosenPayload() {
fun removeChosen() {
Paper.book().delete(CHOSEN_PAYLOAD)
}
}
Loading

0 comments on commit 6df7954

Please sign in to comment.