expo-audio 58.0.5 → 58.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/android/build.gradle +3 -2
  3. package/android/src/main/java/expo/modules/audio/AudioModule.kt +2 -6
  4. package/android/src/main/java/expo/modules/audio/AudioRecorder.kt +16 -0
  5. package/ios/AudioModule.swift +4 -12
  6. package/ios/AudioRecorder.swift +17 -0
  7. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.5/expo.modules.audio-58.0.5-sources.jar → 58.0.6/expo.modules.audio-58.0.6-sources.jar} +0 -0
  8. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.md5 +1 -0
  9. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha1 +1 -0
  10. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha256 +1 -0
  11. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6-sources.jar.sha512 +1 -0
  12. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar +0 -0
  13. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.md5 +1 -0
  14. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha1 +1 -0
  15. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha256 +1 -0
  16. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.aar.sha512 +1 -0
  17. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.5/expo.modules.audio-58.0.5.module → 58.0.6/expo.modules.audio-58.0.6.module} +22 -22
  18. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.md5 +1 -0
  19. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha1 +1 -0
  20. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha256 +1 -0
  21. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.module.sha512 +1 -0
  22. package/local-maven-repo/expo/modules/audio/expo.modules.audio/{58.0.5/expo.modules.audio-58.0.5.pom → 58.0.6/expo.modules.audio-58.0.6.pom} +1 -1
  23. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.md5 +1 -0
  24. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha1 +1 -0
  25. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha256 +1 -0
  26. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.6/expo.modules.audio-58.0.6.pom.sha512 +1 -0
  27. package/package.json +4 -4
  28. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5-sources.jar.md5 +0 -1
  29. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5-sources.jar.sha1 +0 -1
  30. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5-sources.jar.sha256 +0 -1
  31. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5-sources.jar.sha512 +0 -1
  32. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.aar +0 -0
  33. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.aar.md5 +0 -1
  34. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.aar.sha1 +0 -1
  35. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.aar.sha256 +0 -1
  36. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.aar.sha512 +0 -1
  37. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.module.md5 +0 -1
  38. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.module.sha1 +0 -1
  39. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.module.sha256 +0 -1
  40. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.module.sha512 +0 -1
  41. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.pom.md5 +0 -1
  42. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.pom.sha1 +0 -1
  43. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.pom.sha256 +0 -1
  44. package/local-maven-repo/expo/modules/audio/expo.modules.audio/58.0.5/expo.modules.audio-58.0.5.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 58.0.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [iOS][Android] Fixed recorders that the user paused starting to record again when the app returned to the foreground. On iOS, this also happened to recorders that were only prepared, and when an audio interruption ended. Now only recordings that the system paused are resumed. ([#51048](https://github.com/expo/expo/pull/51048) by [@alanjhughes](https://github.com/alanjhughes))
8
+
3
9
  ## 58.0.5
4
10
 
5
11
  ### Patch Changes
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.audio'
7
- version = '58.0.5'
7
+ version = '58.0.6'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.audio"
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName "58.0.5"
13
+ versionName "58.0.6"
14
14
  }
15
15
 
16
16
  compileOptions {
@@ -37,4 +37,5 @@ dependencies {
37
37
  implementation "androidx.media3:media3-exoplayer-smoothstreaming:$androidxMedia3Version"
38
38
 
39
39
  testImplementation 'junit:junit:4.13.2'
40
+ testImplementation 'io.mockk:mockk:1.14.9'
40
41
  }
@@ -467,9 +467,7 @@ class AudioModule : Module() {
467
467
  }
468
468
  if (!allowsBackgroundRecording) {
469
469
  recorders.values.forEach { recorder ->
470
- if (recorder.isRecording) {
471
- recorder.pauseRecording()
472
- }
470
+ recorder.pauseForSystem()
473
471
  }
474
472
  }
475
473
  }
@@ -492,9 +490,7 @@ class AudioModule : Module() {
492
490
  }
493
491
  if (!allowsBackgroundRecording) {
494
492
  recorders.values.forEach { recorder ->
495
- if (recorder.isPaused) {
496
- recorder.record()
497
- }
493
+ recorder.resumeAfterSystemPause()
498
494
  }
499
495
  }
500
496
  if (shouldRouteThroughEarpiece) {
@@ -46,6 +46,7 @@ class AudioRecorder(
46
46
  var startTime = 0L
47
47
  var isRecording = false
48
48
  var isPaused = false
49
+ private var isPausedBySystem = false
49
50
  private var recordingTimerJob: Job? = null
50
51
  private var durationLimitMillis: Long? = null
51
52
  var useForegroundService = false
@@ -109,6 +110,7 @@ class AudioRecorder(
109
110
  }
110
111
 
111
112
  fun record() {
113
+ isPausedBySystem = false
112
114
  if (useForegroundService) {
113
115
  serviceConnection.recordingServiceBinder?.service?.registerRecorder(this) ?: run {
114
116
  throw AudioRecordingServiceException("The service connection is not bound, but `allowsBackgroundRecording` is set to `true`")
@@ -157,6 +159,7 @@ class AudioRecorder(
157
159
  }
158
160
 
159
161
  fun pauseRecording() {
162
+ isPausedBySystem = false
160
163
  recordingTimerJob?.cancel()
161
164
  recordingTimerJob = null
162
165
  recorder?.pause()
@@ -165,6 +168,19 @@ class AudioRecorder(
165
168
  isPaused = true
166
169
  }
167
170
 
171
+ fun pauseForSystem() {
172
+ if (isRecording) {
173
+ pauseRecording()
174
+ isPausedBySystem = true
175
+ }
176
+ }
177
+
178
+ fun resumeAfterSystemPause() {
179
+ if (isPausedBySystem && isPaused) {
180
+ record()
181
+ }
182
+ }
183
+
168
184
  private fun scheduleRecordingStop() {
169
185
  recordingTimerJob?.cancel()
170
186
  recordingTimerJob = durationLimitMillis?.let { limit ->
@@ -685,9 +685,7 @@ public class AudioModule: Module {
685
685
 
686
686
  #if os(iOS)
687
687
  registry.allRecorders.values.forEach { recorder in
688
- if recorder.isRecording {
689
- recorder.pauseRecording()
690
- }
688
+ recorder.pauseForSystem()
691
689
  }
692
690
  #endif
693
691
 
@@ -774,9 +772,7 @@ public class AudioModule: Module {
774
772
 
775
773
  #if os(iOS)
776
774
  registry.allRecorders.values.forEach { recorder in
777
- if recorder.allowsRecording && !recorder.isRecording {
778
- _ = try? recorder.startRecording()
779
- }
775
+ try? recorder.resumeAfterSystemPause()
780
776
  }
781
777
  #endif
782
778
 
@@ -805,9 +801,7 @@ public class AudioModule: Module {
805
801
  private func pauseAllRecorders() {
806
802
  #if os(iOS)
807
803
  registry.allRecorders.values.forEach { recorder in
808
- if recorder.isRecording {
809
- recorder.pauseRecording()
810
- }
804
+ recorder.pauseForSystem()
811
805
  }
812
806
  #endif
813
807
  }
@@ -815,9 +809,7 @@ public class AudioModule: Module {
815
809
  private func resumeAllRecorders() {
816
810
  #if os(iOS)
817
811
  registry.allRecorders.values.forEach { recorder in
818
- if recorder.allowsRecording && !recorder.isRecording {
819
- _ = try? recorder.startRecording()
820
- }
812
+ try? recorder.resumeAfterSystemPause()
821
813
  }
822
814
  #endif
823
815
  }
@@ -19,6 +19,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
19
19
  private var currentState: RecordingState = .idle
20
20
  private var recordingSession = AVAudioSession.sharedInstance()
21
21
  var allowsRecording = false
22
+ private var isPausedBySystem = false
22
23
  weak var owningRegistry: AudioComponentRegistry?
23
24
  private var mediaServicesDidReset = false
24
25
  private var currentOptions: RecordingOptions?
@@ -158,6 +159,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
158
159
  }
159
160
 
160
161
  func startRecording() throws -> [String: Any] {
162
+ isPausedBySystem = false
161
163
  guard allowsRecording else {
162
164
  throw RecordingDisabledException()
163
165
  }
@@ -189,6 +191,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
189
191
 
190
192
  // Public method to update state when calling native recording methods directly
191
193
  func updateStateForDirectRecording() {
194
+ isPausedBySystem = false
192
195
  if currentState != .paused {
193
196
  resetDurationTracking()
194
197
  }
@@ -208,6 +211,7 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
208
211
  }
209
212
 
210
213
  func pauseRecording() {
214
+ isPausedBySystem = false
211
215
  guard currentState == .recording else {
212
216
  return
213
217
  }
@@ -218,6 +222,19 @@ class AudioRecorder: SharedRef<AVAudioRecorder>, RecordingResultHandler {
218
222
  currentState = .paused
219
223
  }
220
224
 
225
+ func pauseForSystem() {
226
+ if currentState == .recording {
227
+ pauseRecording()
228
+ isPausedBySystem = true
229
+ }
230
+ }
231
+
232
+ func resumeAfterSystemPause() throws {
233
+ if isPausedBySystem && currentState == .paused {
234
+ _ = try startRecording()
235
+ }
236
+ }
237
+
221
238
  func getRecordingStatus() -> [String: Any] {
222
239
  var result: [String: Any] = [
223
240
  "canRecord": isPrepared,
@@ -0,0 +1 @@
1
+ 4a9c9fa744bae7346ceae6c312ed030bb16584e9d1e66473ebb84219a7ca3875
@@ -0,0 +1 @@
1
+ e7dd160ec6dde30682c7e7001d944f703baa815825c685bc098757fa3f7a2a05db2aae5b95bb12eca2733d4d3867cd3b9321640e88683c2e0b0fc4f4855357c7
@@ -0,0 +1 @@
1
+ 66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054
@@ -0,0 +1 @@
1
+ a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.audio",
5
5
  "module": "expo.modules.audio",
6
- "version": "58.0.5",
6
+ "version": "58.0.6",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.audio-58.0.5.aar",
28
- "url": "expo.modules.audio-58.0.5.aar",
29
- "size": 560725,
30
- "sha512": "59bb12fe2b353f6ed19ac674fd7c169511878f77efed778c4759c30651ef99ab3bc4cf2673281202a73f0f8bac18bb27967bc50f448626a72141ce32f8d2a751",
31
- "sha256": "f5d4f700343bb56181abf818cf378c7565b8ada0706cf9eb49214b8d1c347e63",
32
- "sha1": "1a4b69b4ab712d35dfb53091bdc1324d09004fa0",
33
- "md5": "c5038da7df341d65734dc8acbfcece49"
27
+ "name": "expo.modules.audio-58.0.6.aar",
28
+ "url": "expo.modules.audio-58.0.6.aar",
29
+ "size": 560911,
30
+ "sha512": "a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f",
31
+ "sha256": "66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054",
32
+ "sha1": "a67bfef57451d3cdbf9593b42736336fa342fec6",
33
+ "md5": "8f4b5ebe1aaa3a88feb8d7e2d5ee1191"
34
34
  }
35
35
  ]
36
36
  },
@@ -137,13 +137,13 @@
137
137
  ],
138
138
  "files": [
139
139
  {
140
- "name": "expo.modules.audio-58.0.5.aar",
141
- "url": "expo.modules.audio-58.0.5.aar",
142
- "size": 560725,
143
- "sha512": "59bb12fe2b353f6ed19ac674fd7c169511878f77efed778c4759c30651ef99ab3bc4cf2673281202a73f0f8bac18bb27967bc50f448626a72141ce32f8d2a751",
144
- "sha256": "f5d4f700343bb56181abf818cf378c7565b8ada0706cf9eb49214b8d1c347e63",
145
- "sha1": "1a4b69b4ab712d35dfb53091bdc1324d09004fa0",
146
- "md5": "c5038da7df341d65734dc8acbfcece49"
140
+ "name": "expo.modules.audio-58.0.6.aar",
141
+ "url": "expo.modules.audio-58.0.6.aar",
142
+ "size": 560911,
143
+ "sha512": "a5561246f985399aacbc1973743d782fdb42eade03470bee92eacfb77be5a67157f2b87e96f5004c16b65c146af341a9aa2ed90ca7b7129aca4224f161f0f98f",
144
+ "sha256": "66ef223a729dc25795eb8a2ac81f772110be7331bcb8201858a53dce2d5be054",
145
+ "sha1": "a67bfef57451d3cdbf9593b42736336fa342fec6",
146
+ "md5": "8f4b5ebe1aaa3a88feb8d7e2d5ee1191"
147
147
  }
148
148
  ]
149
149
  },
@@ -157,13 +157,13 @@
157
157
  },
158
158
  "files": [
159
159
  {
160
- "name": "expo.modules.audio-58.0.5-sources.jar",
161
- "url": "expo.modules.audio-58.0.5-sources.jar",
162
- "size": 43083,
163
- "sha512": "86b1307665b7b0b56119af7551c6ed936002c58f2f30baf988dd0ec9339e9c6a2e138834ddeaf29bfa97123932cda4b30d5747b6273b1738f3bedd46a7cab1eb",
164
- "sha256": "2835caa9fe011f7208dc83d76b10c09bad61c9191417ddad8abb463973051dc4",
165
- "sha1": "a494b342680de2a7ced221067b9868313509d34c",
166
- "md5": "ec9446514c3084e508e1357cf2a79520"
160
+ "name": "expo.modules.audio-58.0.6-sources.jar",
161
+ "url": "expo.modules.audio-58.0.6-sources.jar",
162
+ "size": 43154,
163
+ "sha512": "e7dd160ec6dde30682c7e7001d944f703baa815825c685bc098757fa3f7a2a05db2aae5b95bb12eca2733d4d3867cd3b9321640e88683c2e0b0fc4f4855357c7",
164
+ "sha256": "4a9c9fa744bae7346ceae6c312ed030bb16584e9d1e66473ebb84219a7ca3875",
165
+ "sha1": "b025140d2c4d4afec6ff2177e5b11c3a65cf32b8",
166
+ "md5": "83cf708677405e262c8c9b113888d179"
167
167
  }
168
168
  ]
169
169
  }
@@ -0,0 +1 @@
1
+ d238ebe08a1acfb1e1063631b1294e755e2cca72712ce0f0feb03f8bd679aa43
@@ -0,0 +1 @@
1
+ 8ee748f545e08acb280b4bdec8a0d1347a134a03691d2ab568d5c9599733c0c9f1082302c39a1519fd8629fa1fe59520b592ec4fd0ae031067cf9c6e9afea9ea
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>expo.modules.audio</groupId>
11
11
  <artifactId>expo.modules.audio</artifactId>
12
- <version>58.0.5</version>
12
+ <version>58.0.6</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.audio</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ f4958b4616edd823a50ba07a97e253df89049a7a96d9def18be329b8dc3f1687
@@ -0,0 +1 @@
1
+ 208812c172f0ca180d04bf00e1d9e8437b5e1eee5b474afb8cc51f3be64921f2a649f45cc40d6cfb102e8945ee18c64fb077232f869623045c804915d35df07b
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-audio",
3
- "version": "58.0.5",
3
+ "version": "58.0.6",
4
4
  "description": "A cross-platform audio library for React Native and Expo apps.",
5
5
  "keywords": [
6
6
  "android",
@@ -25,9 +25,9 @@
25
25
  "@types/jest": "^30.0.0",
26
26
  "@types/node": "^22.14.0",
27
27
  "@types/react": "~19.3.0",
28
- "expo": "58.0.3",
29
- "expo-asset": "58.0.11",
30
- "expo-module-scripts": "56.0.6"
28
+ "expo": "58.0.4",
29
+ "expo-asset": "58.0.12",
30
+ "expo-module-scripts": "56.0.7"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "expo": "*",
@@ -1 +0,0 @@
1
- 2835caa9fe011f7208dc83d76b10c09bad61c9191417ddad8abb463973051dc4
@@ -1 +0,0 @@
1
- 86b1307665b7b0b56119af7551c6ed936002c58f2f30baf988dd0ec9339e9c6a2e138834ddeaf29bfa97123932cda4b30d5747b6273b1738f3bedd46a7cab1eb
@@ -1 +0,0 @@
1
- 1a4b69b4ab712d35dfb53091bdc1324d09004fa0
@@ -1 +0,0 @@
1
- f5d4f700343bb56181abf818cf378c7565b8ada0706cf9eb49214b8d1c347e63
@@ -1 +0,0 @@
1
- 59bb12fe2b353f6ed19ac674fd7c169511878f77efed778c4759c30651ef99ab3bc4cf2673281202a73f0f8bac18bb27967bc50f448626a72141ce32f8d2a751
@@ -1 +0,0 @@
1
- 321c3267c9079b05f9207b256fc7b60076233c03a62dcda16364633ada200794
@@ -1 +0,0 @@
1
- 5cdc5eecb2b0d1108288a77efccb72ba4a829da74e40da4c4ac5e5dc3693b2a5b908810eb5ba9f703962a2a3bdfcaefbd08611cd8fcb72a78a1845a7423a475b
@@ -1 +0,0 @@
1
- d50e4fd3e33286aec13446fab4167f58b48ed479
@@ -1 +0,0 @@
1
- 565bdb6ba357e61e0386eaa11e259ba3c0b2fbb460bef1656207cd14bb1b400d
@@ -1 +0,0 @@
1
- 256f6fa951975aeb8b4468588cee5e205d2d38aa06cc85ba4514ddb3b418c354ae379e52f1243a1bc606e8d7e684beb2aaf09f663c706290eaea079e829cdc10