Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/morlunk/jumble/audio/inputmode/ToggleInputMode.java')
-rw-r--r--src/main/java/com/morlunk/jumble/audio/inputmode/ToggleInputMode.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/main/java/com/morlunk/jumble/audio/inputmode/ToggleInputMode.java b/src/main/java/com/morlunk/jumble/audio/inputmode/ToggleInputMode.java
index 1a86e62..cb3fb16 100644
--- a/src/main/java/com/morlunk/jumble/audio/inputmode/ToggleInputMode.java
+++ b/src/main/java/com/morlunk/jumble/audio/inputmode/ToggleInputMode.java
@@ -17,19 +17,31 @@
package com.morlunk.jumble.audio.inputmode;
+import android.util.Log;
+
+import com.morlunk.jumble.Constants;
+
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
/**
* An input mode that depends on a toggle, such as push to talk.
* Created by andrew on 13/02/16.
*/
public class ToggleInputMode implements IInputMode {
private boolean mInputOn;
+ private final Lock mToggleLock;
+ private final Condition mToggleCondition;
public ToggleInputMode() {
mInputOn = false;
+ mToggleLock = new ReentrantLock();
+ mToggleCondition = mToggleLock.newCondition();
}
public void toggleTalkingOn() {
- mInputOn = !mInputOn;
+ setTalkingOn(!mInputOn);
}
public boolean isTalkingOn() {
@@ -37,11 +49,30 @@ public class ToggleInputMode implements IInputMode {
}
public void setTalkingOn(boolean talking) {
+ mToggleLock.lock();
mInputOn = talking;
+ mToggleCondition.signalAll();
+ mToggleLock.unlock();
}
@Override
public boolean shouldTransmit(short[] pcm, int length) {
return mInputOn;
}
+
+ @Override
+ public void waitForInput() {
+ mToggleLock.lock();
+ if (!mInputOn) {
+ Log.v(Constants.TAG, "PTT: Suspending audio input.");
+ long startTime = System.currentTimeMillis();
+ try {
+ mToggleCondition.await();
+ } catch (InterruptedException e) {
+ Log.w(Constants.TAG, "Blocking for PTT interrupted, likely due to input thread shutdown.");
+ }
+ Log.v(Constants.TAG, "PTT: Suspended audio input for " + (System.currentTimeMillis() - startTime) + "ms.");
+ }
+ mToggleLock.unlock();
+ }
}