react-native-audio-api 0.11.0-nightly-94b7f30-20251230 → 0.11.0-nightly-d5e82df-20260101
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.
- package/android/src/main/java/com/swmansion/audioapi/system/MediaSessionManager.kt +38 -11
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js +1 -1
- package/lib/commonjs/AudioAPIModule/AudioAPIModule.js.map +1 -1
- package/lib/module/AudioAPIModule/AudioAPIModule.js +1 -1
- package/lib/module/AudioAPIModule/AudioAPIModule.js.map +1 -1
- package/lib/typescript/AudioAPIModule/AudioAPIModule.d.ts.map +1 -1
- package/package.json +8 -8
- package/scripts/validate-worklets-version.js +1 -1
- package/src/AudioAPIModule/AudioAPIModule.ts +1 -1
|
@@ -10,6 +10,7 @@ import android.media.AudioDeviceInfo
|
|
|
10
10
|
import android.media.AudioManager
|
|
11
11
|
import android.os.Build
|
|
12
12
|
import androidx.annotation.RequiresApi
|
|
13
|
+
import androidx.core.app.ActivityCompat
|
|
13
14
|
import androidx.core.app.NotificationCompat
|
|
14
15
|
import androidx.core.content.ContextCompat
|
|
15
16
|
import com.facebook.react.bridge.Arguments
|
|
@@ -134,16 +135,30 @@ object MediaSessionManager {
|
|
|
134
135
|
permissionAwareActivity.requestPermissions(arrayOf(Manifest.permission.RECORD_AUDIO), RECORDING_REQUEST_CODE, permissionListener)
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
fun checkRecordingPermissions(): String
|
|
138
|
-
|
|
138
|
+
fun checkRecordingPermissions(): String {
|
|
139
|
+
val context = reactContext.get()!!
|
|
140
|
+
|
|
141
|
+
if (context.checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) {
|
|
142
|
+
return "Granted"
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Permission not granted - check if we should show rationale
|
|
146
|
+
val activity = context.currentActivity
|
|
147
|
+
if (activity != null &&
|
|
148
|
+
ActivityCompat.shouldShowRequestPermissionRationale(
|
|
149
|
+
activity,
|
|
139
150
|
Manifest.permission.RECORD_AUDIO,
|
|
140
|
-
)
|
|
151
|
+
)
|
|
141
152
|
) {
|
|
142
|
-
"
|
|
143
|
-
|
|
144
|
-
"Denied"
|
|
153
|
+
// User previously denied but didn't select "Don't ask again"
|
|
154
|
+
return "Denied"
|
|
145
155
|
}
|
|
146
156
|
|
|
157
|
+
// Either never asked OR user selected "Don't ask again"
|
|
158
|
+
// Return "Undetermined" to match iOS behavior and let caller decide to request
|
|
159
|
+
return "Undetermined"
|
|
160
|
+
}
|
|
161
|
+
|
|
147
162
|
fun requestNotificationPermissions(permissionListener: PermissionListener) {
|
|
148
163
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
149
164
|
val permissionAwareActivity = reactContext.get()!!.currentActivity as PermissionAwareActivity
|
|
@@ -166,14 +181,26 @@ object MediaSessionManager {
|
|
|
166
181
|
|
|
167
182
|
fun checkNotificationPermissions(): String {
|
|
168
183
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
169
|
-
|
|
184
|
+
val context = reactContext.get()!!
|
|
185
|
+
|
|
186
|
+
if (context.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
|
|
187
|
+
return "Granted"
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Permission not granted - check if we should show rationale
|
|
191
|
+
val activity = context.currentActivity
|
|
192
|
+
if (activity != null &&
|
|
193
|
+
ActivityCompat.shouldShowRequestPermissionRationale(
|
|
194
|
+
activity,
|
|
170
195
|
Manifest.permission.POST_NOTIFICATIONS,
|
|
171
|
-
)
|
|
196
|
+
)
|
|
172
197
|
) {
|
|
173
|
-
"
|
|
174
|
-
|
|
175
|
-
"Denied"
|
|
198
|
+
// User previously denied but didn't select "Don't ask again"
|
|
199
|
+
return "Denied"
|
|
176
200
|
}
|
|
201
|
+
|
|
202
|
+
// Either never asked OR user selected "Don't ask again"
|
|
203
|
+
return "Undetermined"
|
|
177
204
|
}
|
|
178
205
|
// For Android < 13, permission is granted by default
|
|
179
206
|
return "Granted"
|
|
@@ -10,7 +10,7 @@ class AudioAPIModule {
|
|
|
10
10
|
#canUseWorklets_ = false;
|
|
11
11
|
#workletsVersion = 'unknown';
|
|
12
12
|
#workletsAvailable_ = false;
|
|
13
|
-
supportedWorkletsVersion = ['0.6.0', '0.6.1'];
|
|
13
|
+
supportedWorkletsVersion = ['0.6.0', '0.6.1', '0.7.0', '0.7.1'];
|
|
14
14
|
constructor() {
|
|
15
15
|
// Important! Verify and import worklets first
|
|
16
16
|
// otherwise the native module installation might crash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_specs","require","AudioAPIModule","workletsModule_","canUseWorklets_","workletsVersion","workletsAvailable_","supportedWorkletsVersion","constructor","verifyWorklets","verifyInstallation","NativeAudioAPIModule","Error","install","#verifyWorklets","workletsPackage","workletsPackageJson","version","includes","#verifyInstallation","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","workletsModule","canUseWorklets","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","createWorkletRuntime","_default","exports","default"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAOA,MAAMC,cAAc,CAA4B;EAC9C,CAACC,eAAe,GAA2B,IAAI;EAC/C,CAACC,eAAe,GAAG,KAAK;EACxB,CAACC,eAAe,GAAG,SAAS;EAC5B,CAACC,kBAAkB,GAAG,KAAK;EAEpBC,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"names":["_specs","require","AudioAPIModule","workletsModule_","canUseWorklets_","workletsVersion","workletsAvailable_","supportedWorkletsVersion","constructor","verifyWorklets","verifyInstallation","NativeAudioAPIModule","Error","install","#verifyWorklets","workletsPackage","workletsPackageJson","version","includes","#verifyInstallation","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","workletsModule","canUseWorklets","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","createWorkletRuntime","_default","exports","default"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAOA,MAAMC,cAAc,CAA4B;EAC9C,CAACC,eAAe,GAA2B,IAAI;EAC/C,CAACC,eAAe,GAAG,KAAK;EACxB,CAACC,eAAe,GAAG,SAAS;EAC5B,CAACC,kBAAkB,GAAG,KAAK;EAEpBC,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;EAEtEC,WAAWA,CAAA,EAAG;IACZ;IACA;IACA;IACA,IAAI,CAAC,CAACC,cAAc,CAAC,CAAC;IAEtB,IAAI,IAAI,CAAC,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC9B;IACF;IAEA,IAAI,CAACC,2BAAoB,EAAE;MACzB,MAAM,IAAIC,KAAK,CACb,iFACF,CAAC;IACH;IAEAD,2BAAoB,CAACE,OAAO,CAAC,CAAC;EAChC;EAEA,CAACJ,cAAcK,CAAA,EAAY;IACzB,IAAI;MACF,MAAMC,eAAe,GAAGd,OAAO,CAAC,uBAAuB,CAAC;MACxD,MAAMe,mBAAmB,GAAGf,OAAO,CAAC,oCAAoC,CAAC;MACzE,IAAI,CAAC,CAACI,eAAe,GAAGW,mBAAmB,CAACC,OAAO;MACnD,IAAI,CAAC,CAACX,kBAAkB,GAAG,IAAI;MAE/B,IAAI,CAAC,CAACF,eAAe,GAAG,IAAI,CAACG,wBAAwB,CAACW,QAAQ,CAC5DF,mBAAmB,CAACC,OACtB,CAAC;MAED,IAAI,IAAI,CAAC,CAACb,eAAe,EAAE;QACzB,IAAI,CAAC,CAACD,eAAe,GAAGY,eAAe;MACzC;MAEA,OAAO,IAAI,CAAC,CAACX,eAAe;IAC9B,CAAC,CAAC,MAAM;MACN,IAAI,CAAC,CAACA,eAAe,GAAG,KAAK;MAC7B,OAAO,KAAK;IACd;EACF;EAEA,CAACM,kBAAkBS,CAAA,EAAY;IAC7B,OACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,iBAAiB,IAAI,IAAI;EAEpC;EAEA,IAAIC,cAAcA,CAAA,EAA2B;IAC3C,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIyB,cAAcA,CAAA,EAAY;IAC5B,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;EACA,IAAIC,eAAeA,CAAA,EAAW;IAC5B,OAAO,IAAI,CAAC,CAACA,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,oBAAoBA,CAAA,EAAY;IAClC,OAAO,IAAI,CAAC,CAACvB,kBAAkB;EACjC;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,0BAA0BA,CAAA,EAAY;IACxC;IACA,OAAO,IAAI,CAAC,CAAC1B,eAAe;EAC9B;EAEO2B,kBAAkBA,CAAA,EAA0B;IACjD,IAAI,CAAC,IAAI,CAAC,CAAC3B,eAAe,EAAE;MAC1B,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAAC,CAACD,eAAe,CAAE6B,oBAAoB,CAAC,qBAAqB,CAAC;EAC3E;AACF;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc,IAAIjC,cAAc,CAAC,CAAC","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ class AudioAPIModule {
|
|
|
6
6
|
#canUseWorklets_ = false;
|
|
7
7
|
#workletsVersion = 'unknown';
|
|
8
8
|
#workletsAvailable_ = false;
|
|
9
|
-
supportedWorkletsVersion = ['0.6.0', '0.6.1'];
|
|
9
|
+
supportedWorkletsVersion = ['0.6.0', '0.6.1', '0.7.0', '0.7.1'];
|
|
10
10
|
constructor() {
|
|
11
11
|
// Important! Verify and import worklets first
|
|
12
12
|
// otherwise the native module installation might crash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeAudioAPIModule","AudioAPIModule","workletsModule_","canUseWorklets_","workletsVersion","workletsAvailable_","supportedWorkletsVersion","constructor","verifyWorklets","verifyInstallation","Error","install","#verifyWorklets","workletsPackage","require","workletsPackageJson","version","includes","#verifyInstallation","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","workletsModule","canUseWorklets","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","createWorkletRuntime"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,mBAAU;AAO/C,MAAMC,cAAc,CAA4B;EAC9C,CAACC,eAAe,GAA2B,IAAI;EAC/C,CAACC,eAAe,GAAG,KAAK;EACxB,CAACC,eAAe,GAAG,SAAS;EAC5B,CAACC,kBAAkB,GAAG,KAAK;EAEpBC,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"names":["NativeAudioAPIModule","AudioAPIModule","workletsModule_","canUseWorklets_","workletsVersion","workletsAvailable_","supportedWorkletsVersion","constructor","verifyWorklets","verifyInstallation","Error","install","#verifyWorklets","workletsPackage","require","workletsPackageJson","version","includes","#verifyInstallation","global","createAudioContext","createOfflineAudioContext","createAudioRecorder","createAudioDecoder","createAudioStretcher","AudioEventEmitter","workletsModule","canUseWorklets","areWorkletsAvailable","isWorkletsVersionSupported","createAudioRuntime","createWorkletRuntime"],"sourceRoot":"../../../src","sources":["AudioAPIModule/AudioAPIModule.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,mBAAU;AAO/C,MAAMC,cAAc,CAA4B;EAC9C,CAACC,eAAe,GAA2B,IAAI;EAC/C,CAACC,eAAe,GAAG,KAAK;EACxB,CAACC,eAAe,GAAG,SAAS;EAC5B,CAACC,kBAAkB,GAAG,KAAK;EAEpBC,wBAAwB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;EAEtEC,WAAWA,CAAA,EAAG;IACZ;IACA;IACA;IACA,IAAI,CAAC,CAACC,cAAc,CAAC,CAAC;IAEtB,IAAI,IAAI,CAAC,CAACC,kBAAkB,CAAC,CAAC,EAAE;MAC9B;IACF;IAEA,IAAI,CAACT,oBAAoB,EAAE;MACzB,MAAM,IAAIU,KAAK,CACb,iFACF,CAAC;IACH;IAEAV,oBAAoB,CAACW,OAAO,CAAC,CAAC;EAChC;EAEA,CAACH,cAAcI,CAAA,EAAY;IACzB,IAAI;MACF,MAAMC,eAAe,GAAGC,OAAO,CAAC,uBAAuB,CAAC;MACxD,MAAMC,mBAAmB,GAAGD,OAAO,CAAC,oCAAoC,CAAC;MACzE,IAAI,CAAC,CAACV,eAAe,GAAGW,mBAAmB,CAACC,OAAO;MACnD,IAAI,CAAC,CAACX,kBAAkB,GAAG,IAAI;MAE/B,IAAI,CAAC,CAACF,eAAe,GAAG,IAAI,CAACG,wBAAwB,CAACW,QAAQ,CAC5DF,mBAAmB,CAACC,OACtB,CAAC;MAED,IAAI,IAAI,CAAC,CAACb,eAAe,EAAE;QACzB,IAAI,CAAC,CAACD,eAAe,GAAGW,eAAe;MACzC;MAEA,OAAO,IAAI,CAAC,CAACV,eAAe;IAC9B,CAAC,CAAC,MAAM;MACN,IAAI,CAAC,CAACA,eAAe,GAAG,KAAK;MAC7B,OAAO,KAAK;IACd;EACF;EAEA,CAACM,kBAAkBS,CAAA,EAAY;IAC7B,OACEC,MAAM,CAACC,kBAAkB,IAAI,IAAI,IACjCD,MAAM,CAACE,yBAAyB,IAAI,IAAI,IACxCF,MAAM,CAACG,mBAAmB,IAAI,IAAI,IAClCH,MAAM,CAACI,kBAAkB,IAAI,IAAI,IACjCJ,MAAM,CAACK,oBAAoB,IAAI,IAAI,IACnCL,MAAM,CAACM,iBAAiB,IAAI,IAAI;EAEpC;EAEA,IAAIC,cAAcA,CAAA,EAA2B;IAC3C,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIyB,cAAcA,CAAA,EAAY;IAC5B,OAAO,IAAI,CAAC,CAACxB,eAAe;EAC9B;;EAEA;EACA,IAAIC,eAAeA,CAAA,EAAW;IAC5B,OAAO,IAAI,CAAC,CAACA,eAAe;EAC9B;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,oBAAoBA,CAAA,EAAY;IAClC,OAAO,IAAI,CAAC,CAACvB,kBAAkB;EACjC;;EAEA;AACF;AACA;AACA;EACE,IAAIwB,0BAA0BA,CAAA,EAAY;IACxC;IACA,OAAO,IAAI,CAAC,CAAC1B,eAAe;EAC9B;EAEO2B,kBAAkBA,CAAA,EAA0B;IACjD,IAAI,CAAC,IAAI,CAAC,CAAC3B,eAAe,EAAE;MAC1B,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAAC,CAACD,eAAe,CAAE6B,oBAAoB,CAAC,qBAAqB,CAAC;EAC3E;AACF;AAEA,eAAe,IAAI9B,cAAc,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioAPIModule.d.ts","sourceRoot":"","sources":["../../../src/AudioAPIModule/AudioAPIModule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,cAAM,cAAe,YAAW,eAAe;;IAMtC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"AudioAPIModule.d.ts","sourceRoot":"","sources":["../../../src/AudioAPIModule/AudioAPIModule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,cAAM,cAAe,YAAW,eAAe;;IAMtC,wBAAwB,WAAwC;;IAsDvE,IAAI,cAAc,IAAI,eAAe,GAAG,IAAI,CAE3C;IAED;;;OAGG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,2DAA2D;IAC3D,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED;;;OAGG;IACH,IAAI,0BAA0B,IAAI,OAAO,CAGxC;IAEM,kBAAkB,IAAI,cAAc,GAAG,IAAI;CAOnD;;AAED,wBAAoC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-api",
|
|
3
|
-
"version": "0.11.0-nightly-
|
|
3
|
+
"version": "0.11.0-nightly-d5e82df-20260101",
|
|
4
4
|
"description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
|
|
5
5
|
"bin": {
|
|
6
6
|
"setup-rn-audio-api-web": "./scripts/setup-rn-audio-api-web.js"
|
|
@@ -94,17 +94,17 @@
|
|
|
94
94
|
"@evilmartians/lefthook": "^1.5.0",
|
|
95
95
|
"@expo/config-plugins": "^9.0.0",
|
|
96
96
|
"@expo/config-types": "^53.0.4",
|
|
97
|
-
"@react-native/babel-preset": "0.
|
|
98
|
-
"@react-native/eslint-config": "0.
|
|
99
|
-
"@react-native/metro-config": "0.
|
|
100
|
-
"@react-native/typescript-config": "0.
|
|
97
|
+
"@react-native/babel-preset": "0.83.1",
|
|
98
|
+
"@react-native/eslint-config": "0.83.1",
|
|
99
|
+
"@react-native/metro-config": "0.83.1",
|
|
100
|
+
"@react-native/typescript-config": "0.83.1",
|
|
101
101
|
"@types/babel__core": "^7.20.0",
|
|
102
102
|
"@types/babel__generator": "^7.6.4",
|
|
103
103
|
"@types/babel__traverse": "^7.14.2",
|
|
104
104
|
"@types/convert-source-map": "^2.0.0",
|
|
105
105
|
"@types/jest": "^29.5.5",
|
|
106
106
|
"@types/node": "^18.0.0",
|
|
107
|
-
"@types/react": "^19.
|
|
107
|
+
"@types/react": "^19.2.0",
|
|
108
108
|
"@types/react-test-renderer": "^19.1.0",
|
|
109
109
|
"@types/semver": "7.7.1",
|
|
110
110
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
@@ -126,8 +126,8 @@
|
|
|
126
126
|
"eslint-plugin-tsdoc": "^0.2.17",
|
|
127
127
|
"jest": "^29.7.0",
|
|
128
128
|
"prettier": "^3.3.3",
|
|
129
|
-
"react": "19.
|
|
130
|
-
"react-native": "0.
|
|
129
|
+
"react": "19.2.0",
|
|
130
|
+
"react-native": "0.83.1",
|
|
131
131
|
"react-native-builder-bob": "0.33.1",
|
|
132
132
|
"turbo": "^1.10.7",
|
|
133
133
|
"typescript": "~5.8.3"
|
|
@@ -11,7 +11,7 @@ class AudioAPIModule implements IAudioAPIModule {
|
|
|
11
11
|
#workletsVersion = 'unknown';
|
|
12
12
|
#workletsAvailable_ = false;
|
|
13
13
|
|
|
14
|
-
public supportedWorkletsVersion = ['0.6.0', '0.6.1'];
|
|
14
|
+
public supportedWorkletsVersion = ['0.6.0', '0.6.1', '0.7.0', '0.7.1'];
|
|
15
15
|
|
|
16
16
|
constructor() {
|
|
17
17
|
// Important! Verify and import worklets first
|