capacitor-microphone 0.1.10 → 0.1.12

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.
@@ -319,36 +319,87 @@ private void startListeningInternal(PluginCall call, String lang) {
319
319
 
320
320
  @PluginMethod
321
321
  public void restartListening(PluginCall call) {
322
- if (!isListening || currentCall == null) {
323
- call.reject("Cannot restart - not currently listening");
324
- return;
322
+ // 1. Resolver INMEDIATAMENTE el call de restart
323
+ // Esto evita problemas de que el call quede pendiente
324
+ call.resolve(new JSObject().put("status", "restarting"));
325
+
326
+ // 2. Guardar el lenguaje
327
+ final String lang;
328
+ if (currentCall != null) {
329
+ lang = currentCall.getString("lang", "es-MX");
330
+ } else {
331
+ lang = call.getString("lang", "es-MX");
325
332
  }
326
333
 
327
- // Guardar parámetros antes de detener
328
- final String lang = currentCall.getString("lang", "es-MX");
329
-
330
- // Crear un call temporal para el restart
331
- final PluginCall restartCall = currentCall;
332
-
333
- // Detener
334
- stopListening(restartCall);
334
+ // 3. Detener la escucha actual si está activa
335
+ if (isListening) {
336
+ // Usar forceStop() para limpiar sin tocar currentCall
337
+ forceStop();
338
+ }
335
339
 
336
- // Pequeño delay y luego iniciar de nuevo
340
+ // 4. Pequeño delay y comenzar de nuevo
337
341
  getActivity().runOnUiThread(() -> {
338
- // Usar postDelayed con Runnable
339
- getActivity()
340
- .getWindow()
341
- .getDecorView()
342
- .postDelayed(new Runnable() {
343
- @Override
344
- public void run() {
345
- startListeningInternal(restartCall, lang);
346
- call.resolve();
347
- }
348
- }, RESTART_COOLDOWN_MS);
342
+ getActivity().getWindow().getDecorView().postDelayed(() -> {
343
+ // Resetear flags
344
+ isListening = true;
345
+ isDestroyed = false;
346
+
347
+ // Crear NUEVO PluginCall para el inicio
348
+ PluginCall newCall = new PluginCall(
349
+ "restart_" + System.currentTimeMillis(),
350
+ "capacitor-microphone",
351
+ "startListening",
352
+ new JSObject().put("lang", lang)
353
+ );
354
+
355
+ // Iniciar nueva sesión
356
+ startListening(newCall);
357
+ }, 500); // Delay suficiente para limpieza
349
358
  });
350
359
  }
351
360
 
361
+ // Método helper para detener sin problemas
362
+ private void forceStop() {
363
+ // Solo cambiar flags
364
+ isListening = false;
365
+ isDestroyed = true;
366
+
367
+ // Limpiar runnables pendientes
368
+ if (delayedStartRunnable != null) {
369
+ getActivity().runOnUiThread(() -> {
370
+ getActivity()
371
+ .getWindow()
372
+ .getDecorView()
373
+ .removeCallbacks(delayedStartRunnable);
374
+ });
375
+ delayedStartRunnable = null;
376
+ }
377
+
378
+ // Detener speech recognizer (igual que stopSpeech pero sin tocar currentCall)
379
+ try {
380
+ lastStopTime = System.currentTimeMillis();
381
+
382
+ if (speechRecognizer != null) {
383
+ speechRecognizer.cancel();
384
+ speechRecognizer.setRecognitionListener(null);
385
+
386
+ final SpeechRecognizer recognizerToDestroy = speechRecognizer;
387
+ speechRecognizer = null;
388
+
389
+ getActivity().runOnUiThread(() -> {
390
+ getActivity()
391
+ .getWindow()
392
+ .getDecorView()
393
+ .postDelayed(() -> {
394
+ try {
395
+ recognizerToDestroy.destroy();
396
+ } catch (Exception ignored) {}
397
+ }, 100);
398
+ });
399
+ }
400
+ } catch (Exception ignored) {}
401
+ }
402
+
352
403
 
353
404
  @Override
354
405
  protected void handleOnDestroy() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor-microphone",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "plugin to use the microphone",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",