diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 90998e5..cd7ff6f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -68,7 +68,7 @@ android:name=".services.RecorderService" android:exported="false"> - + diff --git a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/activities/MainActivity.kt index 611b844..da57b24 100644 --- a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/activities/MainActivity.kt @@ -12,7 +12,7 @@ import com.simplemobiletools.commons.helpers.isQPlus import com.simplemobiletools.commons.models.FAQItem import com.simplemobiletools.voicerecorder.BuildConfig import com.simplemobiletools.voicerecorder.R -import com.simplemobiletools.voicerecorder.helpers.GET_DURATION +import com.simplemobiletools.voicerecorder.helpers.GET_RECORDER_INFO import com.simplemobiletools.voicerecorder.models.Events import com.simplemobiletools.voicerecorder.services.RecorderService import kotlinx.android.synthetic.main.activity_main.* @@ -93,7 +93,7 @@ class MainActivity : SimpleActivity() { } Intent(this@MainActivity, RecorderService::class.java).apply { - action = GET_DURATION + action = GET_RECORDER_INFO startService(this) } } @@ -130,6 +130,12 @@ class MainActivity : SimpleActivity() { updateRecordingDuration(event.duration) } + @Subscribe(threadMode = ThreadMode.MAIN) + fun gotStatusEvent(event: Events.RecordingStatus) { + isRecording = event.isRecording + toggle_recording_button.setImageDrawable(getToggleButtonIcon()) + } + private fun getToggleButtonIcon(): Drawable { val drawable = if (isRecording) R.drawable.ic_stop_vector else R.drawable.ic_mic_vector return resources.getColoredDrawableWithColor(drawable, getFABIconColor()) diff --git a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/helpers/Constants.kt index a29a757..6cf97ec 100644 --- a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/helpers/Constants.kt @@ -3,4 +3,4 @@ package com.simplemobiletools.voicerecorder.helpers const val RECORDER_RUNNING_NOTIF_ID = 10000 private const val PATH = "com.simplemobiletools.voicerecorder.action." -const val GET_DURATION = PATH + "GET_DURATION" +const val GET_RECORDER_INFO = PATH + "GET_RECORDER_INFO" diff --git a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/models/Events.kt b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/models/Events.kt index 9e385a7..7618316 100644 --- a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/models/Events.kt +++ b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/models/Events.kt @@ -2,4 +2,5 @@ package com.simplemobiletools.voicerecorder.models class Events { class RecordingDuration internal constructor(val duration: Int) + class RecordingStatus internal constructor(val isRecording: Boolean) } diff --git a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/services/RecorderService.kt b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/services/RecorderService.kt index d17eeaa..72a02aa 100644 --- a/app/src/main/kotlin/com/simplemobiletools/voicerecorder/services/RecorderService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/voicerecorder/services/RecorderService.kt @@ -19,7 +19,7 @@ import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.commons.helpers.isQPlus import com.simplemobiletools.voicerecorder.R import com.simplemobiletools.voicerecorder.activities.SplashActivity -import com.simplemobiletools.voicerecorder.helpers.GET_DURATION +import com.simplemobiletools.voicerecorder.helpers.GET_RECORDER_INFO import com.simplemobiletools.voicerecorder.helpers.RECORDER_RUNNING_NOTIF_ID import com.simplemobiletools.voicerecorder.models.Events import org.greenrobot.eventbus.EventBus @@ -30,6 +30,7 @@ import java.util.* class RecorderService : Service() { private var currFilePath = "" private var duration = 0 + private var isRecording = false private var timer = Timer() private var recorder: MediaRecorder? = null @@ -39,7 +40,7 @@ class RecorderService : Service() { super.onStartCommand(intent, flags, startId) when (intent.action) { - GET_DURATION -> broadcastDuration() + GET_RECORDER_INFO -> broadcastRecorderInfo() else -> startRecording() } @@ -55,10 +56,6 @@ class RecorderService : Service() { // mp4 output format with aac encoding should produce good enough mp3 files according to https://stackoverflow.com/a/33054794/1967672 private fun startRecording() { - startForeground(RECORDER_RUNNING_NOTIF_ID, showNotification()) - duration = 0 - broadcastDuration() - val baseFolder = if (isQPlus()) { cacheDir } else { @@ -80,16 +77,22 @@ class RecorderService : Service() { prepare() start() duration = 0 + isRecording = true + broadcastRecorderInfo() + startForeground(RECORDER_RUNNING_NOTIF_ID, showNotification()) + timer = Timer() timer.scheduleAtFixedRate(getTimerTask(), 1000, 1000) } catch (e: IOException) { showErrorToast(e) + stopRecording() } } } private fun stopRecording() { timer.cancel() + isRecording = false recorder?.apply { stop() @@ -106,6 +109,11 @@ class RecorderService : Service() { recorder = null } + private fun broadcastRecorderInfo() { + broadcastDuration() + broadcastStatus() + } + @SuppressLint("InlinedApi") private fun addFileInNewMediaStore() { val audioCollection = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) @@ -186,4 +194,8 @@ class RecorderService : Service() { private fun broadcastDuration() { EventBus.getDefault().post(Events.RecordingDuration(duration)) } + + private fun broadcastStatus() { + EventBus.getDefault().post(Events.RecordingStatus(isRecording)) + } }