react-native-kookit 0.1.8 → 0.2.0

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/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "react-native-kookit",
3
- "version": "0.1.8",
3
+ "version": "0.2.0",
4
4
  "description": "React Native module for intercepting volume button presses on iOS and Android",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
7
7
  "scripts": {
8
8
  "build": "expo-module build",
9
9
  "build-plugin": "cd plugin && npm install && npm run build",
10
+ "clean-plugin-deps": "rm -rf plugin/node_modules plugin/package-lock.json",
10
11
  "clean": "expo-module clean",
11
12
  "lint": "expo-module lint",
12
13
  "test": "expo-module test",
13
14
  "prepare": "expo-module prepare",
14
- "prepublishOnly": "expo-module prepublishOnly && npm run build-plugin",
15
+ "prepublishOnly": "expo-module prepublishOnly && npm run build-plugin && npm run clean-plugin-deps",
15
16
  "expo-module": "expo-module",
16
17
  "open:ios": "xed example/ios",
17
18
  "open:android": "open -a \"Android Studio\" example/android",
@@ -34,19 +35,28 @@
34
35
  "author": "troyeguo <13820674+troyeguo@users.noreply.github.com> (https://github.com/troyeguo)",
35
36
  "license": "MIT",
36
37
  "homepage": "https://github.com/troyeguo/react-native-kookit#readme",
37
- "dependencies": {
38
- "@expo/config-plugins": "^8.0.0",
39
- "expo": "~53.0.20",
40
- "react": "19.0.0",
41
- "react-native": "0.79.5"
42
- },
38
+ "files": [
39
+ "build",
40
+ "android/src",
41
+ "android/build.gradle",
42
+ "ios",
43
+ "app.plugin.js",
44
+ "expo-module.config.json",
45
+ "plugin/build",
46
+ "plugin/package.json",
47
+ "*.md"
48
+ ],
49
+ "dependencies": {},
43
50
  "devDependencies": {
51
+ "@expo/config-plugins": "^8.0.0",
44
52
  "@types/react": "~19.0.0",
45
53
  "expo-module-scripts": "^4.1.10",
46
54
  "expo": "~53.0.0",
55
+ "react": "19.0.0",
47
56
  "react-native": "0.79.1"
48
57
  },
49
58
  "peerDependencies": {
59
+ "@expo/config-plugins": "*",
50
60
  "expo": "*",
51
61
  "react": "*",
52
62
  "react-native": "*"
package/.eslintrc.js DELETED
@@ -1,5 +0,0 @@
1
- module.exports = {
2
- root: true,
3
- extends: ['universe/native', 'universe/web'],
4
- ignorePatterns: ['build'],
5
- };
package/app.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "ios": {
3
- "bundleIdentifier": "com.troyeguo.react-native-kookit"
4
- }
5
- }
@@ -1,51 +0,0 @@
1
- {
2
- "name": "react-native-kookit",
3
- "version": "0.1.2",
4
- "description": "React Native module for intercepting volume button presses on iOS and Android",
5
- "main": "build/index.js",
6
- "types": "build/index.d.ts",
7
- "scripts": {
8
- "build": "expo-module build",
9
- "clean": "expo-module clean",
10
- "lint": "expo-module lint",
11
- "test": "expo-module test",
12
- "prepare": "expo-module prepare",
13
- "prepublishOnly": "expo-module prepublishOnly",
14
- "expo-module": "expo-module",
15
- "open:ios": "xed example/ios",
16
- "open:android": "open -a \"Android Studio\" example/android"
17
- },
18
- "keywords": [
19
- "react-native",
20
- "expo",
21
- "volume-keys",
22
- "volume-buttons",
23
- "key-interception",
24
- "react-native-kookit",
25
- "ReactNativeKookit"
26
- ],
27
- "repository": "https://github.com/troyeguo/react-native-kookit",
28
- "bugs": {
29
- "url": "https://github.com/troyeguo/react-native-kookit/issues"
30
- },
31
- "author": "troyeguo <13820674+troyeguo@users.noreply.github.com> (https://github.com/troyeguo)",
32
- "license": "MIT",
33
- "homepage": "https://github.com/troyeguo/react-native-kookit#readme",
34
- "dependencies": {},
35
- "devDependencies": {
36
- "@types/react": "~19.0.0",
37
- "expo-module-scripts": "^4.1.10",
38
- "expo": "~53.0.0",
39
- "react-native": "0.79.1"
40
- },
41
- "peerDependencies": {
42
- "expo": "*",
43
- "react": "*",
44
- "react-native": "*"
45
- },
46
- "expo": {
47
- "android": {
48
- "configPlugins": ["./plugin/build/withVolumeKeyIntercept.js"]
49
- }
50
- }
51
- }
@@ -1,763 +0,0 @@
1
- {
2
- "name": "react-native-kookit-plugin",
3
- "version": "1.0.0",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "react-native-kookit-plugin",
9
- "version": "1.0.0",
10
- "dependencies": {
11
- "@expo/config-plugins": "^8.0.0"
12
- },
13
- "devDependencies": {
14
- "@types/node": "^20.0.0",
15
- "typescript": "^5.0.0"
16
- }
17
- },
18
- "node_modules/@babel/code-frame": {
19
- "version": "7.10.4",
20
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
21
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
22
- "license": "MIT",
23
- "dependencies": {
24
- "@babel/highlight": "^7.10.4"
25
- }
26
- },
27
- "node_modules/@babel/helper-validator-identifier": {
28
- "version": "7.27.1",
29
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
30
- "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
31
- "license": "MIT",
32
- "engines": {
33
- "node": ">=6.9.0"
34
- }
35
- },
36
- "node_modules/@babel/highlight": {
37
- "version": "7.25.9",
38
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz",
39
- "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==",
40
- "license": "MIT",
41
- "dependencies": {
42
- "@babel/helper-validator-identifier": "^7.25.9",
43
- "chalk": "^2.4.2",
44
- "js-tokens": "^4.0.0",
45
- "picocolors": "^1.0.0"
46
- },
47
- "engines": {
48
- "node": ">=6.9.0"
49
- }
50
- },
51
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
52
- "version": "3.2.1",
53
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
54
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
55
- "license": "MIT",
56
- "dependencies": {
57
- "color-convert": "^1.9.0"
58
- },
59
- "engines": {
60
- "node": ">=4"
61
- }
62
- },
63
- "node_modules/@babel/highlight/node_modules/chalk": {
64
- "version": "2.4.2",
65
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
66
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
67
- "license": "MIT",
68
- "dependencies": {
69
- "ansi-styles": "^3.2.1",
70
- "escape-string-regexp": "^1.0.5",
71
- "supports-color": "^5.3.0"
72
- },
73
- "engines": {
74
- "node": ">=4"
75
- }
76
- },
77
- "node_modules/@babel/highlight/node_modules/color-convert": {
78
- "version": "1.9.3",
79
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
80
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
81
- "license": "MIT",
82
- "dependencies": {
83
- "color-name": "1.1.3"
84
- }
85
- },
86
- "node_modules/@babel/highlight/node_modules/color-name": {
87
- "version": "1.1.3",
88
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
89
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
90
- "license": "MIT"
91
- },
92
- "node_modules/@babel/highlight/node_modules/has-flag": {
93
- "version": "3.0.0",
94
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
95
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
96
- "license": "MIT",
97
- "engines": {
98
- "node": ">=4"
99
- }
100
- },
101
- "node_modules/@babel/highlight/node_modules/supports-color": {
102
- "version": "5.5.0",
103
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
104
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
105
- "license": "MIT",
106
- "dependencies": {
107
- "has-flag": "^3.0.0"
108
- },
109
- "engines": {
110
- "node": ">=4"
111
- }
112
- },
113
- "node_modules/@expo/config-plugins": {
114
- "version": "8.0.11",
115
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.11.tgz",
116
- "integrity": "sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==",
117
- "license": "MIT",
118
- "dependencies": {
119
- "@expo/config-types": "^51.0.3",
120
- "@expo/json-file": "~8.3.0",
121
- "@expo/plist": "^0.1.0",
122
- "@expo/sdk-runtime-versions": "^1.0.0",
123
- "chalk": "^4.1.2",
124
- "debug": "^4.3.1",
125
- "find-up": "~5.0.0",
126
- "getenv": "^1.0.0",
127
- "glob": "7.1.6",
128
- "resolve-from": "^5.0.0",
129
- "semver": "^7.5.4",
130
- "slash": "^3.0.0",
131
- "slugify": "^1.6.6",
132
- "xcode": "^3.0.1",
133
- "xml2js": "0.6.0"
134
- }
135
- },
136
- "node_modules/@expo/config-types": {
137
- "version": "51.0.3",
138
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz",
139
- "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==",
140
- "license": "MIT"
141
- },
142
- "node_modules/@expo/json-file": {
143
- "version": "8.3.3",
144
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz",
145
- "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==",
146
- "license": "MIT",
147
- "dependencies": {
148
- "@babel/code-frame": "~7.10.4",
149
- "json5": "^2.2.2",
150
- "write-file-atomic": "^2.3.0"
151
- }
152
- },
153
- "node_modules/@expo/plist": {
154
- "version": "0.1.3",
155
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz",
156
- "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==",
157
- "license": "MIT",
158
- "dependencies": {
159
- "@xmldom/xmldom": "~0.7.7",
160
- "base64-js": "^1.2.3",
161
- "xmlbuilder": "^14.0.0"
162
- }
163
- },
164
- "node_modules/@expo/sdk-runtime-versions": {
165
- "version": "1.0.0",
166
- "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz",
167
- "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==",
168
- "license": "MIT"
169
- },
170
- "node_modules/@types/node": {
171
- "version": "20.19.10",
172
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.10.tgz",
173
- "integrity": "sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==",
174
- "dev": true,
175
- "license": "MIT",
176
- "dependencies": {
177
- "undici-types": "~6.21.0"
178
- }
179
- },
180
- "node_modules/@xmldom/xmldom": {
181
- "version": "0.7.13",
182
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
183
- "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
184
- "deprecated": "this version is no longer supported, please update to at least 0.8.*",
185
- "license": "MIT",
186
- "engines": {
187
- "node": ">=10.0.0"
188
- }
189
- },
190
- "node_modules/ansi-styles": {
191
- "version": "4.3.0",
192
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
193
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
194
- "license": "MIT",
195
- "dependencies": {
196
- "color-convert": "^2.0.1"
197
- },
198
- "engines": {
199
- "node": ">=8"
200
- },
201
- "funding": {
202
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
203
- }
204
- },
205
- "node_modules/balanced-match": {
206
- "version": "1.0.2",
207
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
208
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
209
- "license": "MIT"
210
- },
211
- "node_modules/base64-js": {
212
- "version": "1.5.1",
213
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
214
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
215
- "funding": [
216
- {
217
- "type": "github",
218
- "url": "https://github.com/sponsors/feross"
219
- },
220
- {
221
- "type": "patreon",
222
- "url": "https://www.patreon.com/feross"
223
- },
224
- {
225
- "type": "consulting",
226
- "url": "https://feross.org/support"
227
- }
228
- ],
229
- "license": "MIT"
230
- },
231
- "node_modules/big-integer": {
232
- "version": "1.6.52",
233
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
234
- "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
235
- "license": "Unlicense",
236
- "engines": {
237
- "node": ">=0.6"
238
- }
239
- },
240
- "node_modules/bplist-creator": {
241
- "version": "0.1.0",
242
- "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz",
243
- "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==",
244
- "license": "MIT",
245
- "dependencies": {
246
- "stream-buffers": "2.2.x"
247
- }
248
- },
249
- "node_modules/bplist-parser": {
250
- "version": "0.3.1",
251
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz",
252
- "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==",
253
- "license": "MIT",
254
- "dependencies": {
255
- "big-integer": "1.6.x"
256
- },
257
- "engines": {
258
- "node": ">= 5.10.0"
259
- }
260
- },
261
- "node_modules/brace-expansion": {
262
- "version": "1.1.12",
263
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
264
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
265
- "license": "MIT",
266
- "dependencies": {
267
- "balanced-match": "^1.0.0",
268
- "concat-map": "0.0.1"
269
- }
270
- },
271
- "node_modules/chalk": {
272
- "version": "4.1.2",
273
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
274
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
275
- "license": "MIT",
276
- "dependencies": {
277
- "ansi-styles": "^4.1.0",
278
- "supports-color": "^7.1.0"
279
- },
280
- "engines": {
281
- "node": ">=10"
282
- },
283
- "funding": {
284
- "url": "https://github.com/chalk/chalk?sponsor=1"
285
- }
286
- },
287
- "node_modules/color-convert": {
288
- "version": "2.0.1",
289
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
290
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
291
- "license": "MIT",
292
- "dependencies": {
293
- "color-name": "~1.1.4"
294
- },
295
- "engines": {
296
- "node": ">=7.0.0"
297
- }
298
- },
299
- "node_modules/color-name": {
300
- "version": "1.1.4",
301
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
302
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
303
- "license": "MIT"
304
- },
305
- "node_modules/concat-map": {
306
- "version": "0.0.1",
307
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
308
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
309
- "license": "MIT"
310
- },
311
- "node_modules/debug": {
312
- "version": "4.4.1",
313
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
314
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
315
- "license": "MIT",
316
- "dependencies": {
317
- "ms": "^2.1.3"
318
- },
319
- "engines": {
320
- "node": ">=6.0"
321
- },
322
- "peerDependenciesMeta": {
323
- "supports-color": {
324
- "optional": true
325
- }
326
- }
327
- },
328
- "node_modules/escape-string-regexp": {
329
- "version": "1.0.5",
330
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
331
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
332
- "license": "MIT",
333
- "engines": {
334
- "node": ">=0.8.0"
335
- }
336
- },
337
- "node_modules/find-up": {
338
- "version": "5.0.0",
339
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
340
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
341
- "license": "MIT",
342
- "dependencies": {
343
- "locate-path": "^6.0.0",
344
- "path-exists": "^4.0.0"
345
- },
346
- "engines": {
347
- "node": ">=10"
348
- },
349
- "funding": {
350
- "url": "https://github.com/sponsors/sindresorhus"
351
- }
352
- },
353
- "node_modules/fs.realpath": {
354
- "version": "1.0.0",
355
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
356
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
357
- "license": "ISC"
358
- },
359
- "node_modules/getenv": {
360
- "version": "1.0.0",
361
- "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz",
362
- "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==",
363
- "license": "MIT",
364
- "engines": {
365
- "node": ">=6"
366
- }
367
- },
368
- "node_modules/glob": {
369
- "version": "7.1.6",
370
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
371
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
372
- "deprecated": "Glob versions prior to v9 are no longer supported",
373
- "license": "ISC",
374
- "dependencies": {
375
- "fs.realpath": "^1.0.0",
376
- "inflight": "^1.0.4",
377
- "inherits": "2",
378
- "minimatch": "^3.0.4",
379
- "once": "^1.3.0",
380
- "path-is-absolute": "^1.0.0"
381
- },
382
- "engines": {
383
- "node": "*"
384
- },
385
- "funding": {
386
- "url": "https://github.com/sponsors/isaacs"
387
- }
388
- },
389
- "node_modules/graceful-fs": {
390
- "version": "4.2.11",
391
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
392
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
393
- "license": "ISC"
394
- },
395
- "node_modules/has-flag": {
396
- "version": "4.0.0",
397
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
398
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
399
- "license": "MIT",
400
- "engines": {
401
- "node": ">=8"
402
- }
403
- },
404
- "node_modules/imurmurhash": {
405
- "version": "0.1.4",
406
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
407
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
408
- "license": "MIT",
409
- "engines": {
410
- "node": ">=0.8.19"
411
- }
412
- },
413
- "node_modules/inflight": {
414
- "version": "1.0.6",
415
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
416
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
417
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
418
- "license": "ISC",
419
- "dependencies": {
420
- "once": "^1.3.0",
421
- "wrappy": "1"
422
- }
423
- },
424
- "node_modules/inherits": {
425
- "version": "2.0.4",
426
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
427
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
428
- "license": "ISC"
429
- },
430
- "node_modules/js-tokens": {
431
- "version": "4.0.0",
432
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
433
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
434
- "license": "MIT"
435
- },
436
- "node_modules/json5": {
437
- "version": "2.2.3",
438
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
439
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
440
- "license": "MIT",
441
- "bin": {
442
- "json5": "lib/cli.js"
443
- },
444
- "engines": {
445
- "node": ">=6"
446
- }
447
- },
448
- "node_modules/locate-path": {
449
- "version": "6.0.0",
450
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
451
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
452
- "license": "MIT",
453
- "dependencies": {
454
- "p-locate": "^5.0.0"
455
- },
456
- "engines": {
457
- "node": ">=10"
458
- },
459
- "funding": {
460
- "url": "https://github.com/sponsors/sindresorhus"
461
- }
462
- },
463
- "node_modules/minimatch": {
464
- "version": "3.1.2",
465
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
466
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
467
- "license": "ISC",
468
- "dependencies": {
469
- "brace-expansion": "^1.1.7"
470
- },
471
- "engines": {
472
- "node": "*"
473
- }
474
- },
475
- "node_modules/ms": {
476
- "version": "2.1.3",
477
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
478
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
479
- "license": "MIT"
480
- },
481
- "node_modules/once": {
482
- "version": "1.4.0",
483
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
484
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
485
- "license": "ISC",
486
- "dependencies": {
487
- "wrappy": "1"
488
- }
489
- },
490
- "node_modules/p-limit": {
491
- "version": "3.1.0",
492
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
493
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
494
- "license": "MIT",
495
- "dependencies": {
496
- "yocto-queue": "^0.1.0"
497
- },
498
- "engines": {
499
- "node": ">=10"
500
- },
501
- "funding": {
502
- "url": "https://github.com/sponsors/sindresorhus"
503
- }
504
- },
505
- "node_modules/p-locate": {
506
- "version": "5.0.0",
507
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
508
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
509
- "license": "MIT",
510
- "dependencies": {
511
- "p-limit": "^3.0.2"
512
- },
513
- "engines": {
514
- "node": ">=10"
515
- },
516
- "funding": {
517
- "url": "https://github.com/sponsors/sindresorhus"
518
- }
519
- },
520
- "node_modules/path-exists": {
521
- "version": "4.0.0",
522
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
523
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
524
- "license": "MIT",
525
- "engines": {
526
- "node": ">=8"
527
- }
528
- },
529
- "node_modules/path-is-absolute": {
530
- "version": "1.0.1",
531
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
532
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
533
- "license": "MIT",
534
- "engines": {
535
- "node": ">=0.10.0"
536
- }
537
- },
538
- "node_modules/picocolors": {
539
- "version": "1.1.1",
540
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
541
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
542
- "license": "ISC"
543
- },
544
- "node_modules/plist": {
545
- "version": "3.1.0",
546
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
547
- "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
548
- "license": "MIT",
549
- "dependencies": {
550
- "@xmldom/xmldom": "^0.8.8",
551
- "base64-js": "^1.5.1",
552
- "xmlbuilder": "^15.1.1"
553
- },
554
- "engines": {
555
- "node": ">=10.4.0"
556
- }
557
- },
558
- "node_modules/plist/node_modules/@xmldom/xmldom": {
559
- "version": "0.8.10",
560
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
561
- "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
562
- "license": "MIT",
563
- "engines": {
564
- "node": ">=10.0.0"
565
- }
566
- },
567
- "node_modules/plist/node_modules/xmlbuilder": {
568
- "version": "15.1.1",
569
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
570
- "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
571
- "license": "MIT",
572
- "engines": {
573
- "node": ">=8.0"
574
- }
575
- },
576
- "node_modules/resolve-from": {
577
- "version": "5.0.0",
578
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
579
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
580
- "license": "MIT",
581
- "engines": {
582
- "node": ">=8"
583
- }
584
- },
585
- "node_modules/sax": {
586
- "version": "1.4.1",
587
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
588
- "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
589
- "license": "ISC"
590
- },
591
- "node_modules/semver": {
592
- "version": "7.7.2",
593
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
594
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
595
- "license": "ISC",
596
- "bin": {
597
- "semver": "bin/semver.js"
598
- },
599
- "engines": {
600
- "node": ">=10"
601
- }
602
- },
603
- "node_modules/signal-exit": {
604
- "version": "3.0.7",
605
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
606
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
607
- "license": "ISC"
608
- },
609
- "node_modules/simple-plist": {
610
- "version": "1.3.1",
611
- "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz",
612
- "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==",
613
- "license": "MIT",
614
- "dependencies": {
615
- "bplist-creator": "0.1.0",
616
- "bplist-parser": "0.3.1",
617
- "plist": "^3.0.5"
618
- }
619
- },
620
- "node_modules/slash": {
621
- "version": "3.0.0",
622
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
623
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
624
- "license": "MIT",
625
- "engines": {
626
- "node": ">=8"
627
- }
628
- },
629
- "node_modules/slugify": {
630
- "version": "1.6.6",
631
- "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
632
- "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==",
633
- "license": "MIT",
634
- "engines": {
635
- "node": ">=8.0.0"
636
- }
637
- },
638
- "node_modules/stream-buffers": {
639
- "version": "2.2.0",
640
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
641
- "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==",
642
- "license": "Unlicense",
643
- "engines": {
644
- "node": ">= 0.10.0"
645
- }
646
- },
647
- "node_modules/supports-color": {
648
- "version": "7.2.0",
649
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
650
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
651
- "license": "MIT",
652
- "dependencies": {
653
- "has-flag": "^4.0.0"
654
- },
655
- "engines": {
656
- "node": ">=8"
657
- }
658
- },
659
- "node_modules/typescript": {
660
- "version": "5.9.2",
661
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
662
- "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
663
- "dev": true,
664
- "license": "Apache-2.0",
665
- "bin": {
666
- "tsc": "bin/tsc",
667
- "tsserver": "bin/tsserver"
668
- },
669
- "engines": {
670
- "node": ">=14.17"
671
- }
672
- },
673
- "node_modules/undici-types": {
674
- "version": "6.21.0",
675
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
676
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
677
- "dev": true,
678
- "license": "MIT"
679
- },
680
- "node_modules/uuid": {
681
- "version": "7.0.3",
682
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
683
- "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
684
- "license": "MIT",
685
- "bin": {
686
- "uuid": "dist/bin/uuid"
687
- }
688
- },
689
- "node_modules/wrappy": {
690
- "version": "1.0.2",
691
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
692
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
693
- "license": "ISC"
694
- },
695
- "node_modules/write-file-atomic": {
696
- "version": "2.4.3",
697
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
698
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
699
- "license": "ISC",
700
- "dependencies": {
701
- "graceful-fs": "^4.1.11",
702
- "imurmurhash": "^0.1.4",
703
- "signal-exit": "^3.0.2"
704
- }
705
- },
706
- "node_modules/xcode": {
707
- "version": "3.0.1",
708
- "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz",
709
- "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==",
710
- "license": "Apache-2.0",
711
- "dependencies": {
712
- "simple-plist": "^1.1.0",
713
- "uuid": "^7.0.3"
714
- },
715
- "engines": {
716
- "node": ">=10.0.0"
717
- }
718
- },
719
- "node_modules/xml2js": {
720
- "version": "0.6.0",
721
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz",
722
- "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==",
723
- "license": "MIT",
724
- "dependencies": {
725
- "sax": ">=0.6.0",
726
- "xmlbuilder": "~11.0.0"
727
- },
728
- "engines": {
729
- "node": ">=4.0.0"
730
- }
731
- },
732
- "node_modules/xml2js/node_modules/xmlbuilder": {
733
- "version": "11.0.1",
734
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
735
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
736
- "license": "MIT",
737
- "engines": {
738
- "node": ">=4.0"
739
- }
740
- },
741
- "node_modules/xmlbuilder": {
742
- "version": "14.0.0",
743
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz",
744
- "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==",
745
- "license": "MIT",
746
- "engines": {
747
- "node": ">=8.0"
748
- }
749
- },
750
- "node_modules/yocto-queue": {
751
- "version": "0.1.0",
752
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
753
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
754
- "license": "MIT",
755
- "engines": {
756
- "node": ">=10"
757
- },
758
- "funding": {
759
- "url": "https://github.com/sponsors/sindresorhus"
760
- }
761
- }
762
- }
763
- }
@@ -1,184 +0,0 @@
1
- import {
2
- ConfigPlugin,
3
- withMainActivity,
4
- AndroidConfig,
5
- } from "@expo/config-plugins";
6
- import * as fs from "fs";
7
- import * as path from "path";
8
-
9
- /**
10
- * Expo config plugin to automatically modify MainActivity for volume key interception
11
- */
12
- const withVolumeKeyIntercept: ConfigPlugin = (config) => {
13
- return withMainActivity(config, (config) => {
14
- config.modResults = addVolumeKeyInterceptionToMainActivity(
15
- config.modResults
16
- );
17
- return config;
18
- });
19
- };
20
-
21
- function addVolumeKeyInterceptionToMainActivity(
22
- mainActivity: AndroidConfig.Paths.ApplicationProjectFile
23
- ): AndroidConfig.Paths.ApplicationProjectFile {
24
- const { language, contents } = mainActivity;
25
-
26
- if (language === "java") {
27
- mainActivity.contents = addVolumeKeyInterceptionJava(contents);
28
- } else if (language === "kt") {
29
- mainActivity.contents = addVolumeKeyInterceptionKotlin(contents);
30
- }
31
-
32
- return mainActivity;
33
- }
34
-
35
- function addVolumeKeyInterceptionKotlin(contents: string): string {
36
- // Check if already implemented
37
- if (contents.includes("VolumeKeyInterceptActivity")) {
38
- return contents;
39
- }
40
-
41
- // Add imports
42
- const imports = [
43
- "import android.view.KeyEvent",
44
- "import expo.modules.kookit.VolumeKeyInterceptActivity",
45
- "import expo.modules.kookit.handleVolumeKeyEvent",
46
- ];
47
-
48
- let modifiedContents = contents;
49
-
50
- // Add imports after existing imports
51
- const lastImportMatch = modifiedContents.match(/import\s+[^\n]+\n(?!import)/);
52
- if (lastImportMatch) {
53
- const importInsertIndex =
54
- lastImportMatch.index! + lastImportMatch[0].length;
55
- const importsToAdd = imports.filter(
56
- (imp) => !modifiedContents.includes(imp)
57
- );
58
- if (importsToAdd.length > 0) {
59
- modifiedContents =
60
- modifiedContents.slice(0, importInsertIndex) +
61
- importsToAdd.join("\n") +
62
- "\n" +
63
- modifiedContents.slice(importInsertIndex);
64
- }
65
- }
66
-
67
- // Add interface to class declaration
68
- modifiedContents = modifiedContents.replace(
69
- /class MainActivity\s*:\s*ReactActivity\(\)/,
70
- "class MainActivity : ReactActivity(), VolumeKeyInterceptActivity"
71
- );
72
-
73
- // Add properties and methods
74
- const volumeKeyMethods = `
75
- // Volume key interception properties and methods - Added by react-native-kookit
76
- private var volumeKeyListener: ((Int) -> Unit)? = null
77
- private var isVolumeKeyInterceptEnabled = false
78
-
79
- override fun setVolumeKeyListener(listener: ((Int) -> Unit)?) {
80
- volumeKeyListener = listener
81
- }
82
-
83
- override fun setVolumeKeyInterceptEnabled(enabled: Boolean) {
84
- isVolumeKeyInterceptEnabled = enabled
85
- }
86
-
87
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
88
- if (isVolumeKeyInterceptEnabled && handleVolumeKeyEvent(event)) {
89
- return true
90
- }
91
- return super.dispatchKeyEvent(event)
92
- }
93
- `;
94
-
95
- // Insert before the last closing brace
96
- const lastBraceIndex = modifiedContents.lastIndexOf("}");
97
- modifiedContents =
98
- modifiedContents.slice(0, lastBraceIndex) +
99
- volumeKeyMethods +
100
- "\n" +
101
- modifiedContents.slice(lastBraceIndex);
102
-
103
- return modifiedContents;
104
- }
105
-
106
- function addVolumeKeyInterceptionJava(contents: string): string {
107
- // Check if already implemented
108
- if (contents.includes("VolumeKeyInterceptActivity")) {
109
- return contents;
110
- }
111
-
112
- // Add imports
113
- const imports = [
114
- "import android.view.KeyEvent;",
115
- "import expo.modules.kookit.VolumeKeyInterceptActivity;",
116
- "import expo.modules.kookit.VolumeKeyInterceptActivityKt;",
117
- "import kotlin.Unit;",
118
- "import kotlin.jvm.functions.Function1;",
119
- ];
120
-
121
- let modifiedContents = contents;
122
-
123
- // Add imports after existing imports
124
- const lastImportMatch = modifiedContents.match(
125
- /import\s+[^;]+;(?!\s*import)/
126
- );
127
- if (lastImportMatch) {
128
- const importInsertIndex =
129
- lastImportMatch.index! + lastImportMatch[0].length;
130
- const importsToAdd = imports.filter(
131
- (imp) => !modifiedContents.includes(imp)
132
- );
133
- if (importsToAdd.length > 0) {
134
- modifiedContents =
135
- modifiedContents.slice(0, importInsertIndex) +
136
- "\n" +
137
- importsToAdd.join("\n") +
138
- modifiedContents.slice(importInsertIndex);
139
- }
140
- }
141
-
142
- // Add interface to class declaration
143
- modifiedContents = modifiedContents.replace(
144
- /public\s+class\s+MainActivity\s+extends\s+ReactActivity/,
145
- "public class MainActivity extends ReactActivity implements VolumeKeyInterceptActivity"
146
- );
147
-
148
- // Add properties and methods
149
- const volumeKeyMethods = `
150
- // Volume key interception properties and methods - Added by react-native-kookit
151
- private Function1<Integer, Unit> volumeKeyListener;
152
- private boolean isVolumeKeyInterceptEnabled = false;
153
-
154
- @Override
155
- public void setVolumeKeyListener(Function1<Integer, Unit> listener) {
156
- this.volumeKeyListener = listener;
157
- }
158
-
159
- @Override
160
- public void setVolumeKeyInterceptEnabled(boolean enabled) {
161
- this.isVolumeKeyInterceptEnabled = enabled;
162
- }
163
-
164
- @Override
165
- public boolean dispatchKeyEvent(KeyEvent event) {
166
- if (isVolumeKeyInterceptEnabled && VolumeKeyInterceptActivityKt.handleVolumeKeyEvent(this, event)) {
167
- return true;
168
- }
169
- return super.dispatchKeyEvent(event);
170
- }
171
- `;
172
-
173
- // Insert before the last closing brace
174
- const lastBraceIndex = modifiedContents.lastIndexOf("}");
175
- modifiedContents =
176
- modifiedContents.slice(0, lastBraceIndex) +
177
- volumeKeyMethods +
178
- "\n" +
179
- modifiedContents.slice(lastBraceIndex);
180
-
181
- return modifiedContents;
182
- }
183
-
184
- export default withVolumeKeyIntercept;
@@ -1,18 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "commonjs",
5
- "lib": ["ES2020"],
6
- "outDir": "./build",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "forceConsistentCasingInFileNames": true,
12
- "declaration": true,
13
- "declarationMap": true,
14
- "sourceMap": true
15
- },
16
- "include": ["src/**/*"],
17
- "exclude": ["node_modules", "build"]
18
- }
@@ -1 +0,0 @@
1
- {"root":["./src/withvolumekeyintercept.ts"],"version":"5.9.2"}
@@ -1,24 +0,0 @@
1
- import type { StyleProp, ViewStyle } from "react-native";
2
-
3
- export type OnLoadEventPayload = {
4
- url: string;
5
- };
6
-
7
- export type VolumeKeyEventPayload = {
8
- key: "up" | "down";
9
- };
10
-
11
- export type ReactNativeKookitModuleEvents = {
12
- onChange: (params: ChangeEventPayload) => void;
13
- onVolumeButtonPressed: (params: VolumeKeyEventPayload) => void;
14
- };
15
-
16
- export type ChangeEventPayload = {
17
- value: string;
18
- };
19
-
20
- export type ReactNativeKookitViewProps = {
21
- url: string;
22
- onLoad: (event: { nativeEvent: OnLoadEventPayload }) => void;
23
- style?: StyleProp<ViewStyle>;
24
- };
@@ -1,36 +0,0 @@
1
- import { NativeModule, requireNativeModule } from "expo";
2
-
3
- import { ReactNativeKookitModuleEvents } from "./ReactNativeKookit.types";
4
-
5
- declare class ReactNativeKookitModule extends NativeModule<ReactNativeKookitModuleEvents> {
6
- PI: number;
7
-
8
- /**
9
- * Returns a hello world string
10
- */
11
- hello(): string;
12
-
13
- /**
14
- * Test async function that sends a change event
15
- */
16
- setValueAsync(value: string): Promise<void>;
17
-
18
- /**
19
- * Enables volume key interception.
20
- * On Android, your MainActivity must implement VolumeKeyInterceptActivity interface.
21
- * On iOS, this works automatically.
22
- *
23
- * @throws Error if MainActivity doesn't implement VolumeKeyInterceptActivity on Android
24
- */
25
- enableVolumeKeyInterception(): void;
26
-
27
- /**
28
- * Disables volume key interception
29
- */
30
- disableVolumeKeyInterception(): void;
31
- }
32
-
33
- // This call loads the native module object from the JSI.
34
- export default requireNativeModule<ReactNativeKookitModule>(
35
- "ReactNativeKookit"
36
- );
@@ -1,48 +0,0 @@
1
- import { registerWebModule, NativeModule } from "expo";
2
-
3
- import { ReactNativeKookitModuleEvents } from "./ReactNativeKookit.types";
4
-
5
- class ReactNativeKookitModule extends NativeModule<ReactNativeKookitModuleEvents> {
6
- PI = Math.PI;
7
- async setValueAsync(value: string): Promise<void> {
8
- this.emit("onChange", { value });
9
- }
10
- hello() {
11
- return "Hello world! 👋";
12
- }
13
- enableVolumeKeyInterception() {
14
- // Web implementation - listen for keyboard events
15
- if (typeof window !== "undefined") {
16
- this.handleKeyDown = this.handleKeyDown.bind(this);
17
- window.addEventListener("keydown", this.handleKeyDown);
18
- }
19
- }
20
- disableVolumeKeyInterception() {
21
- // Web implementation - remove keyboard event listeners
22
- if (typeof window !== "undefined" && this.handleKeyDown) {
23
- window.removeEventListener("keydown", this.handleKeyDown);
24
- }
25
- }
26
-
27
- private handleKeyDown(event: KeyboardEvent) {
28
- // On web, we can simulate volume key detection using specific keys
29
- // This is a fallback since web doesn't have direct access to volume keys
30
- let keyType: "up" | "down" | null = null;
31
-
32
- if (event.code === "ArrowUp" && event.altKey) {
33
- keyType = "up";
34
- } else if (event.code === "ArrowDown" && event.altKey) {
35
- keyType = "down";
36
- }
37
-
38
- if (keyType) {
39
- event.preventDefault();
40
- this.emit("onVolumeButtonPressed", { key: keyType });
41
- }
42
- }
43
- }
44
-
45
- export default registerWebModule(
46
- ReactNativeKookitModule,
47
- "ReactNativeKookitModule"
48
- );
@@ -1,11 +0,0 @@
1
- import { requireNativeView } from 'expo';
2
- import * as React from 'react';
3
-
4
- import { ReactNativeKookitViewProps } from './ReactNativeKookit.types';
5
-
6
- const NativeView: React.ComponentType<ReactNativeKookitViewProps> =
7
- requireNativeView('ReactNativeKookit');
8
-
9
- export default function ReactNativeKookitView(props: ReactNativeKookitViewProps) {
10
- return <NativeView {...props} />;
11
- }
@@ -1,15 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { ReactNativeKookitViewProps } from './ReactNativeKookit.types';
4
-
5
- export default function ReactNativeKookitView(props: ReactNativeKookitViewProps) {
6
- return (
7
- <div>
8
- <iframe
9
- style={{ flex: 1 }}
10
- src={props.url}
11
- onLoad={() => props.onLoad({ nativeEvent: { url: props.url } })}
12
- />
13
- </div>
14
- );
15
- }
package/src/index.ts DELETED
@@ -1,5 +0,0 @@
1
- // Reexport the native module. On web, it will be resolved to ReactNativeKookitModule.web.ts
2
- // and on native platforms to ReactNativeKookitModule.ts
3
- export { default } from './ReactNativeKookitModule';
4
- export { default as ReactNativeKookitView } from './ReactNativeKookitView';
5
- export * from './ReactNativeKookit.types';
@@ -1,25 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "🔧 Building React Native Kookit Module..."
4
-
5
- # Build the module
6
- npm run build
7
-
8
- if [ $? -eq 0 ]; then
9
- echo "✅ Module built successfully!"
10
- echo ""
11
- echo "📱 To test volume key interception:"
12
- echo "1. Make sure your MainActivity implements VolumeKeyInterceptActivity (see VOLUME_KEYS.md)"
13
- echo "2. Run the example app: cd example && npm run android"
14
- echo "3. Enable volume interception in the app"
15
- echo "4. Press physical volume keys to test"
16
- echo ""
17
- echo "📋 Expected behavior:"
18
- echo "- Volume HUD should NOT appear"
19
- echo "- System volume should NOT change"
20
- echo "- App should show alert with 'up' or 'down' key events"
21
- echo ""
22
- echo "📖 See VOLUME_KEYS.md for detailed implementation guide"
23
- else
24
- echo "❌ Build failed. Please check errors above."
25
- fi
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- // @generated by expo-module-scripts
2
- {
3
- "extends": "expo-module-scripts/tsconfig.base",
4
- "compilerOptions": {
5
- "outDir": "./build"
6
- },
7
- "include": ["./src"],
8
- "exclude": ["**/__mocks__/*", "**/__tests__/*", "**/__rsc_tests__/*"]
9
- }