diff options
author | Andrew Comminos <andrewcomminos@gmail.com> | 2014-05-25 02:28:01 +0400 |
---|---|---|
committer | Andrew Comminos <andrewcomminos@gmail.com> | 2014-05-25 02:28:01 +0400 |
commit | 42b75e266eabb5063fb94a824c48a76b74981fe5 (patch) | |
tree | c56621759dd2b4ecf57b8103ee592076f6efac6d | |
parent | 6960c522fa2d08af04b8ca71aec1fe17d369549c (diff) |
Added half duplex support.
-rw-r--r-- | src/main/java/com/morlunk/jumble/JumbleService.java | 4 | ||||
-rw-r--r-- | src/main/java/com/morlunk/jumble/protocol/AudioHandler.java | 28 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/main/java/com/morlunk/jumble/JumbleService.java b/src/main/java/com/morlunk/jumble/JumbleService.java index 8070944..8375d2f 100644 --- a/src/main/java/com/morlunk/jumble/JumbleService.java +++ b/src/main/java/com/morlunk/jumble/JumbleService.java @@ -87,6 +87,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon public static final String EXTRAS_TRUST_STORE_PASSWORD = "trust_store_password"; /** The trust store's format. */ public static final String EXTRAS_TRUST_STORE_FORMAT = "trust_store_format"; + public static final String EXTRAS_HALF_DUPLEX = "half_duplex"; public static final String ACTION_DISCONNECT = "com.morlunk.jumble.DISCONNECT"; @@ -112,6 +113,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon private String mTrustStore; private String mTrustStorePassword; private String mTrustStoreFormat; + private boolean mHalfDuplex; private JumbleConnection mConnection; private ChannelHandler mChannelHandler; @@ -573,6 +575,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon mTrustStore = extras.getString(EXTRAS_TRUST_STORE); mTrustStorePassword = extras.getString(EXTRAS_TRUST_STORE_PASSWORD); mTrustStoreFormat = extras.getString(EXTRAS_TRUST_STORE_FORMAT); + mHalfDuplex = extras.getBoolean(EXTRAS_HALF_DUPLEX); try { mConnection.setTrustStore(mTrustStore, mTrustStorePassword, mTrustStoreFormat); @@ -585,6 +588,7 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon mAudioHandler.setAudioStream(mAudioStream); mAudioHandler.setFramesPerPacket(mFramesPerPacket); mAudioHandler.setSampleRate(mInputRate); + mAudioHandler.setHalfDuplex(mHalfDuplex); connect(); } catch (AudioException e) { diff --git a/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java b/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java index 5ad717c..f7e9150 100644 --- a/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java +++ b/src/main/java/com/morlunk/jumble/protocol/AudioHandler.java @@ -44,6 +44,7 @@ import com.morlunk.jumble.util.JumbleNetworkListener; */ public class AudioHandler extends JumbleNetworkListener { private Context mContext; + private AudioManager mAudioManager; private AudioInput mInput; private AudioOutput mOutput; private AudioInput.AudioInputListener mInputListener; @@ -61,6 +62,7 @@ public class AudioHandler extends JumbleNetworkListener { private boolean mInitialized; private boolean mBluetoothOn; + private boolean mHalfDuplex; private BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() { @Override @@ -89,6 +91,7 @@ public class AudioHandler extends JumbleNetworkListener { mContext = context; mInputListener = inputListener; mOutputListener = outputListener; + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } /** @@ -132,11 +135,17 @@ public class AudioHandler extends JumbleNetworkListener { public void startRecording() throws AudioException { if(mInput == null) createAudioInput(); mInput.startRecording(); + if(mHalfDuplex && mTransmitMode == Constants.TRANSMIT_PUSH_TO_TALK) { + mAudioManager.setStreamMute(getAudioStream(), true); + } } public void stopRecording() { if(mInput == null) return; mInput.stopRecording(); + if(mHalfDuplex && mTransmitMode == Constants.TRANSMIT_PUSH_TO_TALK) { + mAudioManager.setStreamMute(getAudioStream(), false); + } } /** @@ -270,6 +279,25 @@ public class AudioHandler extends JumbleNetworkListener { } /** + * Returns whether or not the audio handler is operating in half duplex mode, muting outgoing + * audio when incoming audio is received. + * @return true if the handler is in half duplex mode. + */ + public boolean isHalfDuplex() { + return mHalfDuplex; + } + + /** + * Sets whether or not the audio handler should operate in half duplex mode, muting outgoing + * audio when incoming audio is received. + * Does not require input thread recreation. + * @param halfDuplex Whether to enable half duplex mode. + */ + public void setHalfDuplex(boolean halfDuplex) { + mHalfDuplex = halfDuplex; + } + + /** * Shuts down the audio handler, halting input and output. * The handler may still be reinitialized with {@link AudioHandler#initialize()} after. */ |