Handle record audio intent
There's a related Intent-extra used to define the maximum file size `MediaStore.Audio.Media.EXTRA_MAX_BYTES` but it's not yet handled by the app (I doubt many apps use it)
This commit is contained in:
parent
67a3c25af5
commit
9a4dcd1d7d
|
@ -68,8 +68,13 @@
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.MainActivity"
|
android:name=".activities.MainActivity"
|
||||||
android:configChanges="orientation|screenSize"
|
android:configChanges="orientation|screenSize"
|
||||||
android:exported="false"
|
android:exported="true"
|
||||||
android:launchMode="singleTask" />
|
android:launchMode="singleTask">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.provider.MediaStore.RECORD_SOUND" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.SettingsActivity"
|
android:name=".activities.SettingsActivity"
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package com.simplemobiletools.voicerecorder.activities
|
package com.simplemobiletools.voicerecorder.activities
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.provider.MediaStore
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
@ -12,12 +14,18 @@ import com.simplemobiletools.voicerecorder.R
|
||||||
import com.simplemobiletools.voicerecorder.adapters.ViewPagerAdapter
|
import com.simplemobiletools.voicerecorder.adapters.ViewPagerAdapter
|
||||||
import com.simplemobiletools.voicerecorder.extensions.config
|
import com.simplemobiletools.voicerecorder.extensions.config
|
||||||
import com.simplemobiletools.voicerecorder.helpers.STOP_AMPLITUDE_UPDATE
|
import com.simplemobiletools.voicerecorder.helpers.STOP_AMPLITUDE_UPDATE
|
||||||
|
import com.simplemobiletools.voicerecorder.models.Events
|
||||||
import com.simplemobiletools.voicerecorder.services.RecorderService
|
import com.simplemobiletools.voicerecorder.services.RecorderService
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import me.grantland.widget.AutofitHelper
|
import me.grantland.widget.AutofitHelper
|
||||||
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
import org.greenrobot.eventbus.Subscribe
|
||||||
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
|
|
||||||
class MainActivity : SimpleActivity() {
|
class MainActivity : SimpleActivity() {
|
||||||
|
|
||||||
|
private var bus: EventBus? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
isMaterialActivity = true
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -41,6 +49,8 @@ class MainActivity : SimpleActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bus = EventBus.getDefault()
|
||||||
|
bus!!.register(this)
|
||||||
if (config.recordAfterLaunch && !RecorderService.isRunning) {
|
if (config.recordAfterLaunch && !RecorderService.isRunning) {
|
||||||
Intent(this@MainActivity, RecorderService::class.java).apply {
|
Intent(this@MainActivity, RecorderService::class.java).apply {
|
||||||
try {
|
try {
|
||||||
|
@ -65,6 +75,7 @@ class MainActivity : SimpleActivity() {
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
|
bus?.unregister(this)
|
||||||
getPagerAdapter()?.onDestroy()
|
getPagerAdapter()?.onDestroy()
|
||||||
|
|
||||||
Intent(this@MainActivity, RecorderService::class.java).apply {
|
Intent(this@MainActivity, RecorderService::class.java).apply {
|
||||||
|
@ -79,6 +90,9 @@ class MainActivity : SimpleActivity() {
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
if (main_menu.isSearchOpen) {
|
if (main_menu.isSearchOpen) {
|
||||||
main_menu.closeSearch()
|
main_menu.closeSearch()
|
||||||
|
} else if (isThirdPartyIntent()) {
|
||||||
|
setResult(Activity.RESULT_CANCELED, null)
|
||||||
|
super.onBackPressed()
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed()
|
super.onBackPressed()
|
||||||
}
|
}
|
||||||
|
@ -166,8 +180,12 @@ class MainActivity : SimpleActivity() {
|
||||||
(view_pager.adapter as ViewPagerAdapter).finishActMode()
|
(view_pager.adapter as ViewPagerAdapter).finishActMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
view_pager.currentItem = config.lastUsedViewPagerPage
|
if (isThirdPartyIntent()) {
|
||||||
main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
|
view_pager.currentItem = 0
|
||||||
|
} else {
|
||||||
|
view_pager.currentItem = config.lastUsedViewPagerPage
|
||||||
|
main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupTabColors() {
|
private fun setupTabColors() {
|
||||||
|
@ -206,4 +224,18 @@ class MainActivity : SimpleActivity() {
|
||||||
|
|
||||||
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
|
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isThirdPartyIntent() = intent?.action == MediaStore.Audio.Media.RECORD_SOUND_ACTION
|
||||||
|
|
||||||
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
|
fun recordingSaved(event: Events.RecordingSaved) {
|
||||||
|
if (isThirdPartyIntent()) {
|
||||||
|
Intent().apply {
|
||||||
|
data = event.uri!!
|
||||||
|
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||||
|
setResult(Activity.RESULT_OK, this)
|
||||||
|
}
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.simplemobiletools.voicerecorder.models
|
package com.simplemobiletools.voicerecorder.models
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
|
||||||
class Events {
|
class Events {
|
||||||
class RecordingDuration internal constructor(val duration: Int)
|
class RecordingDuration internal constructor(val duration: Int)
|
||||||
class RecordingStatus internal constructor(val status: Int)
|
class RecordingStatus internal constructor(val status: Int)
|
||||||
class RecordingAmplitude internal constructor(val amplitude: Int)
|
class RecordingAmplitude internal constructor(val amplitude: Int)
|
||||||
class RecordingCompleted internal constructor()
|
class RecordingCompleted internal constructor()
|
||||||
|
class RecordingSaved internal constructor(val uri: Uri?)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.media.MediaScannerConnection
|
import android.media.MediaScannerConnection
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
|
@ -202,7 +203,7 @@ class RecorderService : Service() {
|
||||||
val outputStream = contentResolver.openOutputStream(newUri)
|
val outputStream = contentResolver.openOutputStream(newUri)
|
||||||
val inputStream = getFileInputStreamSync(currFilePath)
|
val inputStream = getFileInputStreamSync(currFilePath)
|
||||||
inputStream!!.copyTo(outputStream!!, DEFAULT_BUFFER_SIZE)
|
inputStream!!.copyTo(outputStream!!, DEFAULT_BUFFER_SIZE)
|
||||||
recordingSavedSuccessfully()
|
recordingSavedSuccessfully(newUri)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
showErrorToast(e)
|
showErrorToast(e)
|
||||||
}
|
}
|
||||||
|
@ -213,11 +214,12 @@ class RecorderService : Service() {
|
||||||
this,
|
this,
|
||||||
arrayOf(currFilePath),
|
arrayOf(currFilePath),
|
||||||
arrayOf(currFilePath.getMimeType())
|
arrayOf(currFilePath.getMimeType())
|
||||||
) { _, _ -> recordingSavedSuccessfully() }
|
) { _, uri -> recordingSavedSuccessfully(uri) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun recordingSavedSuccessfully() {
|
private fun recordingSavedSuccessfully(savedUri: Uri) {
|
||||||
toast(R.string.recording_saved_successfully)
|
toast(R.string.recording_saved_successfully)
|
||||||
|
EventBus.getDefault().post(Events.RecordingSaved(savedUri))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getDurationUpdateTask() = object : TimerTask() {
|
private fun getDurationUpdateTask() = object : TimerTask() {
|
||||||
|
|
Loading…
Reference in New Issue