From 40ae8639a4b0e385fe5fd221388f638d93e71588 Mon Sep 17 00:00:00 2001 From: Davide Depau Date: Wed, 24 Jul 2019 06:55:55 +0200 Subject: [PATCH] Stash --- app/build.gradle | 1 + .../broadcasts/JobProgressUpdateBroadcast.kt | 13 ++++++ .../utils/ktexts/IntentSendBroadcast.kt | 11 +++++ .../eu/depau/etchdroid/worker/IAsyncWorker.kt | 4 +- .../{ => abstractimpl}/AbstractAsyncWorker.kt | 6 ++- .../AbstractAutoProgressAsyncWorker.kt | 4 +- .../AbstractProgressSender.kt | 4 +- .../etchdroid/worker/dto/ProgressDoneDTO.kt | 25 +++++++++++- .../etchdroid/worker/dto/ProgressStartDTO.kt | 40 ++++++++++++++++--- .../etchdroid/worker/dto/ProgressUpdateDTO.kt | 35 ++++++++++++++-- .../enums/{OperationType.kt => JobType.kt} | 2 +- .../worker/impl/BroadcastProgressForwarder.kt | 29 ++++++++++++++ .../Dmg2OutputStreamConvertAsyncService.kt | 11 ++++- .../impl/Input2OutputStreamCopyAsyncWorker.kt | 4 +- 14 files changed, 166 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/eu/depau/etchdroid/broadcasts/JobProgressUpdateBroadcast.kt create mode 100644 app/src/main/java/eu/depau/etchdroid/utils/ktexts/IntentSendBroadcast.kt rename app/src/main/java/eu/depau/etchdroid/worker/{ => abstractimpl}/AbstractAsyncWorker.kt (50%) rename app/src/main/java/eu/depau/etchdroid/worker/{ => abstractimpl}/AbstractAutoProgressAsyncWorker.kt (93%) rename app/src/main/java/eu/depau/etchdroid/worker/{ => abstractimpl}/AbstractProgressSender.kt (84%) rename app/src/main/java/eu/depau/etchdroid/worker/enums/{OperationType.kt => JobType.kt} (83%) create mode 100644 app/src/main/java/eu/depau/etchdroid/worker/impl/BroadcastProgressForwarder.kt diff --git a/app/build.gradle b/app/build.gradle index 8a0f1e3..b11f80d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,6 +40,7 @@ dependencies { implementation 'androidx.core:core:1.2.0-alpha02' implementation 'androidx.fragment:fragment:1.2.0-alpha01' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02' + implementation 'com.github.Depau:kotlet-android:v0.2.4' api 'com.google.guava:guava:27.0.1-android' api 'com.github.codekidX:storage-chooser:2.0.4.2' diff --git a/app/src/main/java/eu/depau/etchdroid/broadcasts/JobProgressUpdateBroadcast.kt b/app/src/main/java/eu/depau/etchdroid/broadcasts/JobProgressUpdateBroadcast.kt new file mode 100644 index 0000000..a7d8553 --- /dev/null +++ b/app/src/main/java/eu/depau/etchdroid/broadcasts/JobProgressUpdateBroadcast.kt @@ -0,0 +1,13 @@ +package eu.depau.etchdroid.broadcasts + +import android.content.Intent +import eu.depau.etchdroid.worker.dto.ProgressUpdateDTO + +object JobProgressUpdateBroadcast { + val action = "eu.depau.etchdroid.broadcast.JOB_PROGRESS_UPDATE" + + fun getIntent(dto: ProgressUpdateDTO) = Intent().apply { + action = this@JobProgressUpdateBroadcast.action + putExtra("data", dto) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/utils/ktexts/IntentSendBroadcast.kt b/app/src/main/java/eu/depau/etchdroid/utils/ktexts/IntentSendBroadcast.kt new file mode 100644 index 0000000..af457ce --- /dev/null +++ b/app/src/main/java/eu/depau/etchdroid/utils/ktexts/IntentSendBroadcast.kt @@ -0,0 +1,11 @@ +package eu.depau.etchdroid.utils.ktexts + +import android.content.Context +import android.content.Intent +import androidx.localbroadcastmanager.content.LocalBroadcastManager + +fun Intent.sendBroadcast(context: Context) = context.sendBroadcast(this) +fun Intent.sendBroadcast(context: Context, receiverPermission: String) = context.sendBroadcast(this, receiverPermission) + +fun Intent.sendLocalBroadcast(context: Context) = LocalBroadcastManager.getInstance(context).sendBroadcast(this) +fun Intent.sendLocalBroadcastSync(context: Context) = LocalBroadcastManager.getInstance(context).sendBroadcastSync(this) \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/IAsyncWorker.kt b/app/src/main/java/eu/depau/etchdroid/worker/IAsyncWorker.kt index 33a89ea..3da2716 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/IAsyncWorker.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/IAsyncWorker.kt @@ -1,6 +1,6 @@ package eu.depau.etchdroid.worker interface IAsyncWorker: IProgressSender { - suspend fun run() - suspend fun runStep(): Boolean + fun run() + fun runStep(): Boolean } \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/AbstractAsyncWorker.kt b/app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractAsyncWorker.kt similarity index 50% rename from app/src/main/java/eu/depau/etchdroid/worker/AbstractAsyncWorker.kt rename to app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractAsyncWorker.kt index f53c935..53fbebe 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/AbstractAsyncWorker.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractAsyncWorker.kt @@ -1,7 +1,9 @@ -package eu.depau.etchdroid.worker +package eu.depau.etchdroid.worker.abstractimpl + +import eu.depau.etchdroid.worker.IAsyncWorker abstract class AbstractAsyncWorker : IAsyncWorker, AbstractProgressSender() { - override suspend fun run() { + override fun run() { while (runStep()) { } } diff --git a/app/src/main/java/eu/depau/etchdroid/worker/AbstractAutoProgressAsyncWorker.kt b/app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractAutoProgressAsyncWorker.kt similarity index 93% rename from app/src/main/java/eu/depau/etchdroid/worker/AbstractAutoProgressAsyncWorker.kt rename to app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractAutoProgressAsyncWorker.kt index fd1b2a8..8a9b690 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/AbstractAutoProgressAsyncWorker.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractAutoProgressAsyncWorker.kt @@ -1,4 +1,4 @@ -package eu.depau.etchdroid.worker +package eu.depau.etchdroid.worker.abstractimpl import eu.depau.etchdroid.worker.dto.ProgressUpdateDTO @@ -26,7 +26,7 @@ abstract class AbstractAutoProgressAsyncWorker(private val totalToDo: Long) : Ab val timeRemainingMillis: Long = ((totalToDo - doneAccumulator) / speedUnitPerMillis).toLong() val dto = progressUpdateDTO.copy( - operationProgress = progress, + jobProgress = progress, stepProgress = progress, timeRemaining = timeRemainingMillis, currentRate = speedUnitPerMillis * 1000 diff --git a/app/src/main/java/eu/depau/etchdroid/worker/AbstractProgressSender.kt b/app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractProgressSender.kt similarity index 84% rename from app/src/main/java/eu/depau/etchdroid/worker/AbstractProgressSender.kt rename to app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractProgressSender.kt index 0174ff8..a96c6ec 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/AbstractProgressSender.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/abstractimpl/AbstractProgressSender.kt @@ -1,5 +1,7 @@ -package eu.depau.etchdroid.worker +package eu.depau.etchdroid.worker.abstractimpl +import eu.depau.etchdroid.worker.IProgressListener +import eu.depau.etchdroid.worker.IProgressSender import eu.depau.etchdroid.worker.dto.ProgressDoneDTO import eu.depau.etchdroid.worker.dto.ProgressStartDTO import eu.depau.etchdroid.worker.dto.ProgressUpdateDTO diff --git a/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressDoneDTO.kt b/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressDoneDTO.kt index 58df979..0f3d701 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressDoneDTO.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressDoneDTO.kt @@ -1,10 +1,31 @@ package eu.depau.etchdroid.worker.dto +import android.os.Parcel import android.os.Parcelable import eu.depau.etchdroid.worker.enums.ErrorType +import eu.depau.kotlet.android.parcelable.* data class ProgressDoneDTO( - val operationId: Int, + val jobId: Long, val error: ErrorType?, val errorData: Parcelable? -) \ No newline at end of file +) : KotletParcelable { + constructor(parcel: Parcel) : this( + jobId = parcel.readLong(), + error = parcel.readNullable { parcel.readEnum() }, + errorData = parcel.readNullable { parcel.readParcelable(Parcelable::class.java.classLoader) } + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.apply { + writeLong(jobId) + writeNullable(error) { writeEnum(it) } + writeNullable(errorData) { writeParcelable(errorData, flags) } + } + } + + companion object { + @JvmField + val CREATOR = parcelableCreator(::ProgressDoneDTO) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressStartDTO.kt b/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressStartDTO.kt index 2b39041..11b0806 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressStartDTO.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressStartDTO.kt @@ -1,13 +1,41 @@ package eu.depau.etchdroid.worker.dto -import eu.depau.etchdroid.worker.enums.OperationType +import android.os.Parcel +import eu.depau.etchdroid.worker.enums.JobType import eu.depau.etchdroid.worker.enums.StepType -import java.util.* +import eu.depau.kotlet.android.parcelable.KotletParcelable +import eu.depau.kotlet.android.parcelable.parcelableCreator +import eu.depau.kotlet.android.parcelable.readEnum +import eu.depau.kotlet.android.parcelable.writeEnum data class ProgressStartDTO( - val operationId: Int, - val operationType: OperationType, + val jobId: Long, + val jobType: JobType, val inputName: String, val outputName: String, - val steps: List> -) \ No newline at end of file + val stepsNamesResIDs: List +) : KotletParcelable { + @Suppress("UNCHECKED_CAST") + constructor(parcel: Parcel) : this( + jobId = parcel.readLong(), + jobType = parcel.readEnum()!!, + inputName = parcel.readString()!!, + outputName = parcel.readString()!!, + stepsNamesResIDs = (parcel.readSerializable() as Array).asList() + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.apply { + writeLong(jobId) + writeEnum(jobType) + writeString(inputName) + writeString(outputName) + writeSerializable(stepsNamesResIDs.toTypedArray()) + } + } + + companion object { + @JvmField + val CREATOR = parcelableCreator(::ProgressStartDTO) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressUpdateDTO.kt b/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressUpdateDTO.kt index db7a9ac..9bb14c7 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressUpdateDTO.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/dto/ProgressUpdateDTO.kt @@ -1,13 +1,42 @@ package eu.depau.etchdroid.worker.dto +import android.os.Parcel import eu.depau.etchdroid.worker.enums.RateUnit +import eu.depau.kotlet.android.parcelable.* data class ProgressUpdateDTO( - val operationId: Int, + val jobId: Long, val currentStep: Int, - val operationProgress: Double, + val jobProgress: Double, val stepProgress: Double?, val timeRemaining: Long?, val currentRate: Double?, val rateUnit: RateUnit? -) \ No newline at end of file +) : KotletParcelable { + constructor(parcel: Parcel) : this( + jobId = parcel.readLong(), + currentStep = parcel.readInt(), + jobProgress = parcel.readDouble(), + stepProgress = parcel.readNullable { parcel.readDouble() }, + timeRemaining = parcel.readNullable { parcel.readLong() }, + currentRate = parcel.readNullable { parcel.readDouble() }, + rateUnit = parcel.readNullable { parcel.readEnum() } + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.apply { + writeLong(jobId) + writeInt(currentStep) + writeDouble(jobProgress) + writeNullable(stepProgress) { writeDouble(it) } + writeNullable(timeRemaining) { writeLong(it) } + writeNullable(currentRate) { writeDouble(it) } + writeNullable(rateUnit) { writeEnum(rateUnit) } + } + } + + companion object { + @JvmField + val CREATOR = parcelableCreator(::ProgressUpdateDTO) + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/enums/OperationType.kt b/app/src/main/java/eu/depau/etchdroid/worker/enums/JobType.kt similarity index 83% rename from app/src/main/java/eu/depau/etchdroid/worker/enums/OperationType.kt rename to app/src/main/java/eu/depau/etchdroid/worker/enums/JobType.kt index 4808c6e..59184e6 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/enums/OperationType.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/enums/JobType.kt @@ -1,6 +1,6 @@ package eu.depau.etchdroid.worker.enums -enum class OperationType { +enum class JobType { FLASH_RAW_IMAGE, FLASH_DMG, FLASH_ELTORITO, diff --git a/app/src/main/java/eu/depau/etchdroid/worker/impl/BroadcastProgressForwarder.kt b/app/src/main/java/eu/depau/etchdroid/worker/impl/BroadcastProgressForwarder.kt new file mode 100644 index 0000000..f5d25f9 --- /dev/null +++ b/app/src/main/java/eu/depau/etchdroid/worker/impl/BroadcastProgressForwarder.kt @@ -0,0 +1,29 @@ +package eu.depau.etchdroid.worker.impl + +import android.content.Context +import eu.depau.etchdroid.worker.IProgressListener +import eu.depau.etchdroid.worker.dto.ProgressDoneDTO +import eu.depau.etchdroid.worker.dto.ProgressStartDTO +import eu.depau.etchdroid.worker.dto.ProgressUpdateDTO + +class BroadcastProgressForwarder( + val jobId: Long, + val context: Context + + ): IProgressListener { + override fun notifyStart(dto: ProgressStartDTO) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun notifyProgress(dto: ProgressUpdateDTO) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun notifyDone(dto: ProgressDoneDTO) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + fun stopForwarding() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/impl/Dmg2OutputStreamConvertAsyncService.kt b/app/src/main/java/eu/depau/etchdroid/worker/impl/Dmg2OutputStreamConvertAsyncService.kt index 8387b8b..5cfcae1 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/impl/Dmg2OutputStreamConvertAsyncService.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/impl/Dmg2OutputStreamConvertAsyncService.kt @@ -1,6 +1,13 @@ package eu.depau.etchdroid.worker.impl -import eu.depau.etchdroid.worker.AbstractAutoProgressAsyncWorker +import eu.depau.etchdroid.worker.abstractimpl.AbstractAutoProgressAsyncWorker +import eu.depau.etchdroid.worker.dto.ProgressUpdateDTO -class Dmg2OutputStreamConvertAsyncService: AbstractAutoProgressAsyncWorker() { +class Dmg2OutputStreamConvertAsyncService(private val totalToDo: Long): AbstractAutoProgressAsyncWorker(totalToDo) { + override val progressUpdateDTO: ProgressUpdateDTO + get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. + + override fun runStep(): Boolean { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } } \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/worker/impl/Input2OutputStreamCopyAsyncWorker.kt b/app/src/main/java/eu/depau/etchdroid/worker/impl/Input2OutputStreamCopyAsyncWorker.kt index 2eee691..7aef9d6 100644 --- a/app/src/main/java/eu/depau/etchdroid/worker/impl/Input2OutputStreamCopyAsyncWorker.kt +++ b/app/src/main/java/eu/depau/etchdroid/worker/impl/Input2OutputStreamCopyAsyncWorker.kt @@ -1,6 +1,6 @@ package eu.depau.etchdroid.worker.impl -import eu.depau.etchdroid.worker.AbstractAutoProgressAsyncWorker +import eu.depau.etchdroid.worker.abstractimpl.AbstractAutoProgressAsyncWorker import eu.depau.etchdroid.worker.dto.ProgressUpdateDTO import java.io.InputStream import java.io.OutputStream @@ -16,7 +16,7 @@ open class Input2OutputStreamCopyAsyncWorker( private val buffer = ByteArray(chunkSize) - override suspend fun runStep(): Boolean { + override fun runStep(): Boolean { val readBytes = source.read(buffer) if (readBytes < 0)