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
|
-
|
|
323
|
-
|
|
324
|
-
|
|
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
|
-
//
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
|
340
|
+
// 4. Pequeño delay y comenzar de nuevo
|
|
337
341
|
getActivity().runOnUiThread(() -> {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
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() {
|