Skip to content

Commit 3e5933e

Browse files
committed
Move test mode selection to settings
1 parent 5dbe992 commit 3e5933e

File tree

6 files changed

+86
-83
lines changed

6 files changed

+86
-83
lines changed

codec2talkie/src/main/java/com/radio/codec2talkie/Codec2Player.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
package com.radio.codec2talkie;
22

3-
import android.bluetooth.BluetoothAdapter;
4-
import android.bluetooth.BluetoothDevice;
53
import android.bluetooth.BluetoothSocket;
6-
import android.content.BroadcastReceiver;
7-
import android.content.Context;
8-
import android.content.Intent;
9-
import android.content.IntentFilter;
104
import android.media.AudioAttributes;
115
import android.media.AudioFormat;
126
import android.media.AudioRecord;
137
import android.media.AudioTrack;
148
import android.media.MediaRecorder;
159
import android.os.Handler;
1610
import android.os.Message;
17-
import android.util.Log;
1811

1912
import java.io.IOException;
2013
import java.io.InputStream;
@@ -86,7 +79,7 @@ public class Codec2Player extends Thread {
8679
private char[] _recordAudioEncodedBuffer;
8780

8881
// loopback mode
89-
private boolean _isLoopbackMode;
82+
private boolean _isCodecTestMode;
9083
private ByteBuffer _loopbackBuffer;
9184

9285
// callbacks
@@ -95,7 +88,7 @@ public class Codec2Player extends Thread {
9588

9689
public Codec2Player(Handler onPlayerStateChanged, int codec2Mode) {
9790
_onPlayerStateChanged = onPlayerStateChanged;
98-
_isLoopbackMode = false;
91+
_isCodecTestMode = false;
9992
_rxDataBuffer = new byte[RX_BUFFER_SIZE];
10093

10194
setCodecModeInternal(codec2Mode);
@@ -142,8 +135,8 @@ public void setUsbPort(UsbSerialPort port) {
142135
_usbPort = port;
143136
}
144137

145-
public void setLoopbackMode(boolean isLoopbackMode) {
146-
_isLoopbackMode = isLoopbackMode;
138+
public void setCodecTestMode(boolean isTestMode) {
139+
_isCodecTestMode = isTestMode;
147140
}
148141

149142
public void setCodecMode(int codecMode) {
@@ -207,7 +200,7 @@ protected void onReceive(byte[] data) {
207200
};
208201

209202
private void sendRawDataToModem(byte[] data) throws IOException {
210-
if (_isLoopbackMode) {
203+
if (_isCodecTestMode) {
211204
try {
212205
_loopbackBuffer.put(data);
213206
} catch (BufferOverflowException e) {
@@ -273,7 +266,7 @@ private void recordAudio() throws IOException {
273266
}
274267

275268
private boolean playAudio() throws IOException {
276-
if (_isLoopbackMode) {
269+
if (_isCodecTestMode) {
277270
return processLoopbackPlayback();
278271
}
279272
int bytesRead = 0;
@@ -365,7 +358,7 @@ public void run() {
365358
setPriority(Thread.MAX_PRIORITY);
366359
try {
367360
setStatus(PLAYER_LISTENING, 0);
368-
if (!_isLoopbackMode) {
361+
if (!_isCodecTestMode) {
369362
_kissProcessor.initialize();
370363
}
371364
while (_isRunning) {

codec2talkie/src/main/java/com/radio/codec2talkie/MainActivity.java

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import androidx.appcompat.app.AppCompatActivity;
44
import androidx.core.app.ActivityCompat;
55
import androidx.core.content.ContextCompat;
6+
import androidx.preference.PreferenceManager;
67

78
import android.Manifest;
89
import android.annotation.SuppressLint;
@@ -11,6 +12,7 @@
1112
import android.content.Context;
1213
import android.content.Intent;
1314
import android.content.IntentFilter;
15+
import android.content.SharedPreferences;
1416
import android.content.pm.PackageManager;
1517
import android.graphics.Color;
1618
import android.graphics.PorterDuff;
@@ -21,28 +23,22 @@
2123
import android.os.Looper;
2224
import android.os.Message;
2325
import android.os.SystemClock;
24-
import android.view.ContextMenu;
2526
import android.view.KeyEvent;
2627
import android.view.Menu;
27-
import android.view.MenuInflater;
2828
import android.view.MenuItem;
2929
import android.view.MotionEvent;
3030
import android.view.View;
31-
import android.widget.AdapterView;
3231
import android.widget.Button;
33-
import android.widget.CheckBox;
34-
import android.widget.CompoundButton;
3532
import android.widget.ProgressBar;
36-
import android.widget.Spinner;
3733
import android.widget.TextView;
3834
import android.widget.Toast;
3935

4036
import com.radio.codec2talkie.bluetooth.BluetoothConnectActivity;
4137
import com.radio.codec2talkie.bluetooth.SocketHandler;
38+
import com.radio.codec2talkie.settings.PreferenceKeys;
4239
import com.radio.codec2talkie.settings.SettingsActivity;
4340
import com.radio.codec2talkie.usb.UsbConnectActivity;
4441
import com.radio.codec2talkie.usb.UsbPortHandler;
45-
import com.ustadmobile.codec2.Codec2;
4642

4743
import java.io.IOException;
4844
import java.util.LinkedList;
@@ -57,22 +53,22 @@ public class MainActivity extends AppCompatActivity {
5753
private final static int REQUEST_PERMISSIONS = 3;
5854
private final static int REQUEST_SETTINGS = 4;
5955

60-
private final static int CODEC2_DEFAULT_MODE = Codec2.CODEC2_MODE_450;
61-
private final static int CODEC2_DEFAULT_MODE_POS = 0;
56+
private final static String CODEC2_DEFAULT_MODE = "MODE_450=10";
6257

6358
private final String[] _requiredPermissions = new String[] {
6459
Manifest.permission.BLUETOOTH,
6560
Manifest.permission.RECORD_AUDIO
6661
};
6762

63+
SharedPreferences _sharedPreferences;
64+
6865
private boolean _isActive = false;
6966

7067
private TextView _textConnInfo;
7168
private TextView _textStatus;
72-
private Spinner _spinnerCodec2Mode;
69+
private TextView _textCodecMode;
7370
private ProgressBar _progressRxLevel;
7471
private ProgressBar _progressTxLevel;
75-
private CheckBox _checkBoxLoopback;
7672
private Button _btnPtt;
7773

7874
private Codec2Player _codec2Player;
@@ -84,24 +80,27 @@ protected void onCreate(Bundle savedInstanceState) {
8480

8581
_isActive = true;
8682

83+
_sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
84+
8785
setContentView(R.layout.activity_main);
8886

8987
_textConnInfo = findViewById(R.id.textBtName);
9088
_textStatus = findViewById(R.id.textStatus);
89+
9190
_progressRxLevel = findViewById(R.id.progressRxLevel);
9291
_progressRxLevel.setMax(-Codec2Player.getAudioMinLevel());
92+
_progressRxLevel.getProgressDrawable().setColorFilter(
93+
new PorterDuffColorFilter(colorFromAudioLevel(Codec2Player.getAudioMinLevel()), PorterDuff.Mode.SRC_IN));
94+
9395
_progressTxLevel = findViewById(R.id.progressTxLevel);
9496
_progressTxLevel.setMax(-Codec2Player.getAudioMinLevel());
97+
_progressTxLevel.getProgressDrawable().setColorFilter(
98+
new PorterDuffColorFilter(colorFromAudioLevel(Codec2Player.getAudioMinLevel()), PorterDuff.Mode.SRC_IN));
9599

96100
_btnPtt = findViewById(R.id.btnPtt);
97101
_btnPtt.setOnTouchListener(onBtnPttTouchListener);
98102

99-
_spinnerCodec2Mode = findViewById(R.id.spinnerCodecMode);
100-
_spinnerCodec2Mode.setSelection(CODEC2_DEFAULT_MODE_POS);
101-
_spinnerCodec2Mode.setOnItemSelectedListener(onCodecModeSelectedListener);
102-
103-
_checkBoxLoopback = findViewById(R.id.checkBoxLoopback);
104-
_checkBoxLoopback.setOnCheckedChangeListener(onLoopbackCheckedChangeListener);
103+
_textCodecMode = findViewById(R.id.codecMode);
105104

106105
registerReceiver(onBluetoothDisconnected, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));
107106
registerReceiver(onUsbDetached, new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED));
@@ -157,30 +156,6 @@ else if (audioLevel == Codec2Player.getAudioMinLevel())
157156
return color;
158157
}
159158

160-
private final CompoundButton.OnCheckedChangeListener onLoopbackCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
161-
@Override
162-
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
163-
if (_codec2Player != null) {
164-
_codec2Player.setLoopbackMode(isChecked);
165-
}
166-
}
167-
};
168-
169-
private final AdapterView.OnItemSelectedListener onCodecModeSelectedListener = new AdapterView.OnItemSelectedListener() {
170-
@Override
171-
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
172-
String selectedCodec = getResources().getStringArray(R.array.codec2_modes)[position];
173-
String [] codecNameCodecId = selectedCodec.split("=");
174-
if (_codec2Player != null) {
175-
_codec2Player.setCodecMode(Integer.parseInt(codecNameCodecId[1]));
176-
}
177-
}
178-
179-
@Override
180-
public void onNothingSelected(AdapterView<?> parent) {
181-
}
182-
};
183-
184159
private final BroadcastReceiver onBluetoothDisconnected = new BroadcastReceiver() {
185160
@Override
186161
public void onReceive(Context context, Intent intent) {
@@ -286,7 +261,6 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
286261
public void handleMessage(Message msg) {
287262
if (_isActive && msg.what == Codec2Player.PLAYER_DISCONNECT) {
288263
_textStatus.setText("STOP");
289-
_checkBoxLoopback.setChecked(false);
290264
Toast.makeText(getBaseContext(), "Disconnected from modem", Toast.LENGTH_SHORT).show();
291265
startUsbConnectActivity();
292266
}
@@ -311,14 +285,28 @@ else if (msg.what == Codec2Player.PLAYER_TX_LEVEL) {
311285
};
312286

313287
private void startPlayer(boolean isUsb) throws IOException {
314-
_codec2Player = new Codec2Player(onPlayerStateChanged, CODEC2_DEFAULT_MODE);
288+
String statusMessage = new String();
289+
290+
String codec2ModePref = _sharedPreferences.getString(PreferenceKeys.CODEC2_MODE, CODEC2_DEFAULT_MODE);
291+
String [] codecNameCodecId = codec2ModePref.split("=");
292+
statusMessage += codecNameCodecId[0];
293+
int codec2Mode = Integer.parseInt(codecNameCodecId[1]);
294+
295+
boolean isTestMode = _sharedPreferences.getBoolean(PreferenceKeys.CODEC2_TEST_MODE, false);
296+
if (isTestMode) {
297+
statusMessage += ", TEST";
298+
}
299+
300+
_codec2Player = new Codec2Player(onPlayerStateChanged, codec2Mode);
315301
if (isUsb) {
316302
_codec2Player.setUsbPort(UsbPortHandler.getPort());
317303
} else {
318304
_codec2Player.setSocket(SocketHandler.getSocket());
319305
}
320-
_spinnerCodec2Mode.setSelection(CODEC2_DEFAULT_MODE_POS);
306+
_codec2Player.setCodecTestMode(isTestMode);
321307
_codec2Player.start();
308+
309+
_textCodecMode.setText(statusMessage);
322310
}
323311

324312
@Override

codec2talkie/src/main/java/com/radio/codec2talkie/settings/PreferenceKeys.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@
33
public final class PreferenceKeys {
44
public static String PORTS_USB_SERIAL_SPEED = "ports_usb_serial_speed";
55
public static String PORTS_BT_CLIENT_NAME = "ports_bt_client_name";
6+
public static String CODEC2_MODE = "codec2_mode";
7+
public static String CODEC2_TEST_MODE = "codec2_test_mode";
68
}

codec2talkie/src/main/res/layout/activity_main.xml

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
android:layout_width="0dp"
2323
android:layout_height="0dp"
2424
android:layout_marginStart="8dp"
25-
android:layout_marginTop="8dp"
2625
android:layout_marginEnd="8dp"
2726
android:layout_marginBottom="8dp"
27+
android:layout_marginTop="8dp"
2828
android:background="@drawable/btn_ptt"
2929
android:hapticFeedbackEnabled="false"
3030
android:text="@string/push_to_talk"
@@ -34,24 +34,17 @@
3434
app:layout_constraintEnd_toEndOf="parent"
3535
app:layout_constraintHorizontal_bias="0.598"
3636
app:layout_constraintStart_toStartOf="parent"
37-
app:layout_constraintTop_toBottomOf="@+id/checkBoxLoopback" />
37+
app:layout_constraintTop_toBottomOf="@+id/codecMode" />
3838

39-
<CheckBox
40-
android:id="@+id/checkBoxLoopback"
41-
android:layout_width="wrap_content"
42-
android:layout_height="48dp"
43-
android:layout_marginStart="16dp"
44-
android:text="codec2 loopback test"
45-
app:layout_constraintStart_toStartOf="parent"
46-
app:layout_constraintTop_toBottomOf="@+id/spinnerCodecMode" />
47-
48-
<Spinner
49-
android:id="@+id/spinnerCodecMode"
39+
<TextView
40+
android:id="@+id/codecMode"
5041
android:layout_width="wrap_content"
5142
android:layout_height="wrap_content"
5243
android:layout_marginStart="16dp"
5344
android:layout_marginTop="8dp"
54-
android:entries="@array/codec2_modes"
45+
android:text="Mode"
46+
android:textAppearance="@style/TextAppearance.AppCompat.Large"
47+
android:textSize="14sp"
5548
app:layout_constraintStart_toStartOf="parent"
5649
app:layout_constraintTop_toBottomOf="@+id/textBtName" />
5750

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
<resources>
22
<string name="app_name">Codec2 Talkie</string>
33
<string name="push_to_talk">push-to-talk</string>
4+
45
<string name="preferences">Preferences</string>
56
<string name="ports_category_title">TNC Settings</string>
7+
68
<string name="usb_serial_speed_title">USB Serial Speed</string>
7-
<string name="usb_bt_client_name_title">TNC Bluetooth Device</string>
9+
<string name="usb_bt_client_name_title">Bluetooth Device</string>
810
<string name="usb_bt_client_name_summary">Default Bluetooth device to connect on startup</string>
9-
<string-array name="codec2_modes">
10-
<item>MODE_450=10</item>
11-
<item>MODE_700C=8</item>
12-
<item>MODE_1200=5</item>
13-
<item>MODE_1300=4</item>
14-
<item>MODE_1400=3</item>
15-
<item>MODE_1600=2</item>
16-
<item>MODE_2400=1</item>
17-
<item>MODE_3200=0</item>
18-
</string-array>
1911
<string-array name="usb_serial_speed">
2012
<item>1200</item>
2113
<item>2400</item>
@@ -26,4 +18,19 @@
2618
<item>57600</item>
2719
<item>115200</item>
2820
</string-array>
21+
22+
<string name="codec2_category_title">Codec2 Settings</string>
23+
<string name="codec2_mode_title">Mode/Speed</string>
24+
<string name="codec2_test_mode_title">Record/Playback Test Mode</string>
25+
<string name="codec2_test_mode_summary">Enables own voice recording/playback without transmission</string>
26+
<string-array name="codec2_modes">
27+
<item>MODE_450=10</item>
28+
<item>MODE_700C=8</item>
29+
<item>MODE_1200=5</item>
30+
<item>MODE_1300=4</item>
31+
<item>MODE_1400=3</item>
32+
<item>MODE_1600=2</item>
33+
<item>MODE_2400=1</item>
34+
<item>MODE_3200=0</item>
35+
</string-array>
2936
</resources>

codec2talkie/src/main/res/xml/preferences.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
<PreferenceCategory
5+
app:key="codec2_category"
6+
app:title="@string/codec2_category_title">
7+
8+
<ListPreference
9+
app:key="codec2_mode"
10+
app:title="@string/codec2_mode_title"
11+
app:entries="@array/codec2_modes"
12+
app:entryValues="@array/codec2_modes"
13+
app:defaultValue="MODE_450=10"
14+
app:summary="%s">
15+
</ListPreference>
16+
17+
<SwitchPreference
18+
app:key="codec2_test_mode"
19+
app:title="@string/codec2_test_mode_title"
20+
app:summary="@string/codec2_test_mode_summary"
21+
app:defaultValue="false">
22+
</SwitchPreference>
23+
</PreferenceCategory>
424
<PreferenceCategory
525
app:key="ports_category"
626
app:title="@string/ports_category_title">

0 commit comments

Comments
 (0)