Settings refactoring

aprs
sh123 2022-08-11 16:40:06 +03:00
rodzic d2728ca58a
commit 863fa37517
10 zmienionych plików z 157 dodań i 66 usunięć

Wyświetl plik

@ -33,6 +33,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.os.SystemClock;
import android.provider.Settings;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
@ -53,6 +54,7 @@ import com.radio.codec2talkie.connect.BleConnectActivity;
import com.radio.codec2talkie.connect.BluetoothConnectActivity;
import com.radio.codec2talkie.connect.BluetoothSocketHandler;
import com.radio.codec2talkie.connect.TcpIpConnectActivity;
import com.radio.codec2talkie.settings.SettingsWrapper;
import com.radio.codec2talkie.storage.log.LogItemActivity;
import com.radio.codec2talkie.protocol.ProtocolFactory;
import com.radio.codec2talkie.recorder.RecorderActivity;
@ -156,12 +158,12 @@ public class MainActivity extends AppCompatActivity implements ServiceConnection
registerReceiver(onBluetoothDisconnected, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));
registerReceiver(onUsbDetached, new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED));
_isTestMode = _sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("loopback");
_isBleEnabled = _sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("ble");
_isTestMode = SettingsWrapper.isLoopbackTransport(_sharedPreferences);
_isBleEnabled = SettingsWrapper.isBleTransport(_sharedPreferences);
// show/hide S-meter
FrameLayout frameRssi = findViewById(R.id.frameRssi);
if (!_sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("sound_modem") &&
if (!SettingsWrapper.isSoundModemEnabled(_sharedPreferences) &&
_sharedPreferences.getBoolean(PreferenceKeys.KISS_EXTENSIONS_ENABLED, false)) {
int sLevelId = RadioTools.getMinimumDecodeSLevelLabel(_sharedPreferences, S_METER_S0_VALUE_DB);
@ -252,31 +254,31 @@ public class MainActivity extends AppCompatActivity implements ServiceConnection
private void startTransportConnection() {
Log.i(TAG, "startTransportConnection()");
String transportName = _sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback");
if (AppService.isRunning) {
startAppService(AppService.transportType);
} else if (requestPermissions()) {
switch (transportName) {
case "loopback":
switch (SettingsWrapper.getCurrentTransportType(_sharedPreferences)) {
case LOOPBACK:
_textConnInfo.setText(R.string.main_status_loopback_test);
startAppService(TransportFactory.TransportType.LOOPBACK);
break;
case "sound_modem":
case SOUND_MODEM:
_textConnInfo.setText(R.string.main_status_sound_modem);
String rig = _sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_RIG, "Disabled");
if (rig.equals("Disabled"))
// start sound modem without rig cat usb connection
if (SettingsWrapper.isSoundModemRigDisabled(_sharedPreferences))
startAppService(TransportFactory.TransportType.SOUND_MODEM);
// otherwise try to connect with usb for cat ptt
else
startUsbConnectActivity();
break;
case "tcp_ip":
case TCP_IP:
startTcpIpConnectActivity();
break;
case "usb":
case USB:
startUsbConnectActivity();
break;
case "bluetooth":
case "ble":
case BLUETOOTH:
case BLE:
startBluetoothConnectActivity();
break;
}
@ -289,8 +291,7 @@ public class MainActivity extends AppCompatActivity implements ServiceConnection
Intent data = result.getData();
assert data != null;
int resultCode = result.getResultCode();
String transportType = _sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback");
if (transportType.equals("sound_modem")) {
if (SettingsWrapper.isSoundModemEnabled(_sharedPreferences)) {
_isRigCtlUsbConnected = resultCode == RESULT_OK;
startAppService(TransportFactory.TransportType.SOUND_MODEM);
} else if (resultCode == RESULT_CANCELED) {

Wyświetl plik

@ -10,6 +10,7 @@ import com.radio.codec2talkie.app.AppWorker;
import com.radio.codec2talkie.protocol.message.TextMessage;
import com.radio.codec2talkie.protocol.position.Position;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.tools.AudioTools;
import com.radio.codec2talkie.transport.Transport;
import com.ustadmobile.codec2.Codec2;
@ -38,7 +39,7 @@ public class Freedv implements Protocol {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String modemType = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200");
int mode = Integer.parseInt(modemType.substring(1));
Log.i(TAG, "Using freedv mode " + mode);
Log.i(TAG, "Using freedv mode " + AudioTools.getFreedvModeAsText(sharedPreferences));
_freedv = Codec2.freedvCreate(mode);
_modemTxBuffer = new short[Codec2.freedvGetNomModemSamples(_freedv)];
@ -53,7 +54,7 @@ public class Freedv implements Protocol {
@Override
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
Codec2.freedvTx(_freedv, _modemTxBuffer, pcmFrame);
Log.i(TAG, "send pcm " + _modemTxBuffer.length);
//Log.i(TAG, "send pcm " + _modemTxBuffer.length);
_transport.write(_modemTxBuffer);
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, pcmFrame);
}
@ -78,7 +79,7 @@ public class Freedv implements Protocol {
if (bytesRead == nin) {
long cntRead = Codec2.freedvRx(_freedv, _speechRxBuffer, buf);
if (cntRead > 0) {
Log.i(TAG, "receive " + cntRead);
//Log.i(TAG, "receive " + cntRead);
_parentProtocolCallback.onReceivePcmAudio(null, null, -1, Arrays.copyOf(_speechRxBuffer, (int) cntRead));
return true;
}

Wyświetl plik

@ -6,6 +6,7 @@ import android.content.SharedPreferences;
import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.settings.SettingsWrapper;
public class ProtocolFactory {
@ -35,17 +36,17 @@ public class ProtocolFactory {
ProtocolFactory.ProtocolType protocolType;
// Use HDLC instead of KISS for the sound modem as we are the modem
if (sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("sound_modem")) {
if (sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200").startsWith("F")) {
if (SettingsWrapper.isSoundModemEnabled(sharedPreferences)) {
if (SettingsWrapper.isFreeDvSoundModemModulation(sharedPreferences)) {
protocolType = ProtocolType.FREEDV;
} else {
protocolType = ProtocolFactory.ProtocolType.HDLC;
}
} else if (sharedPreferences.getBoolean(PreferenceKeys.KISS_ENABLED, true)) {
if (sharedPreferences.getBoolean(PreferenceKeys.KISS_PARROT, false)) {
} else if (SettingsWrapper.isKissProtocolEnabled(sharedPreferences)) {
if (SettingsWrapper.isKissParrotEnabled(sharedPreferences)) {
protocolType = ProtocolFactory.ProtocolType.KISS_PARROT;
}
else if (sharedPreferences.getBoolean(PreferenceKeys.KISS_BUFFERED_ENABLED, false)) {
else if (SettingsWrapper.isKissBufferedModeEnabled(sharedPreferences)) {
protocolType = ProtocolFactory.ProtocolType.KISS_BUFFERED;
}
else {
@ -63,10 +64,10 @@ public class ProtocolFactory {
ProtocolType protocolType = getBaseProtocolType(context);
boolean recordingEnabled = sharedPreferences.getBoolean(PreferenceKeys.CODEC2_RECORDING_ENABLED, false);
boolean scramblingEnabled = sharedPreferences.getBoolean(PreferenceKeys.KISS_SCRAMBLING_ENABLED, false);
String scramblingKey = sharedPreferences.getString(PreferenceKeys.KISS_SCRAMBLER_KEY, "");
boolean aprsEnabled = sharedPreferences.getBoolean(PreferenceKeys.APRS_ENABLED, false);
boolean recordingEnabled = SettingsWrapper.isCodec2RecorderEnabled(sharedPreferences);
boolean scramblingEnabled = SettingsWrapper.isKissScramblerEnabled(sharedPreferences);
String scramblingKey = SettingsWrapper.getKissScramblerKey(sharedPreferences);
boolean aprsEnabled = SettingsWrapper.isAprsEnabled(sharedPreferences);
Protocol proto;
switch (protocolType) {

Wyświetl plik

@ -12,11 +12,13 @@ import com.radio.codec2talkie.settings.PreferenceKeys;
public class RigCtlFactory {
private static final String TAG = RigCtlFactory.class.getSimpleName();
public static final String RIG_DISABLED = "Disabled";
public static RigCtl create(Context context) {
if (UsbPortHandler.getPort() == null)
return new Disabled();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String rigName = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_RIG, "Disabled");
String rigName = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_RIG, RIG_DISABLED);
try {
Class<?> loadClass = Class.forName(String.format("com.radio.codec2talkie.rigctl.%s", rigName));
Log.i(TAG, "Using rig " + rigName);

Wyświetl plik

@ -44,7 +44,7 @@ public class BluetoothSettingsActivity extends AppCompatActivity {
setContentView(R.layout.activity_bluetooth_connect);
_sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
_isBleEnabled = _sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("ble");
_isBleEnabled = SettingsWrapper.isBleTransport(_sharedPreferences);
_btAdapter = BluetoothAdapter.getDefaultAdapter();
_btArrayAdapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item);

Wyświetl plik

@ -0,0 +1,81 @@
package com.radio.codec2talkie.settings;
import android.content.SharedPreferences;
import com.radio.codec2talkie.rigctl.RigCtlFactory;
import com.radio.codec2talkie.transport.TransportFactory;
public class SettingsWrapper {
public static boolean isSoundModemRigDisabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_RIG,
RigCtlFactory.RIG_DISABLED).equals(RigCtlFactory.RIG_DISABLED);
}
public static boolean isSoundModemEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getString(PreferenceKeys.PORTS_TYPE,
TransportFactory.TransportType.LOOPBACK.toString()).toUpperCase().equals(
TransportFactory.TransportType.SOUND_MODEM.toString());
}
public static boolean isLoopbackTransport(SharedPreferences sharedPreferences) {
return sharedPreferences.getString(PreferenceKeys.PORTS_TYPE,
TransportFactory.TransportType.LOOPBACK.toString()).toUpperCase().equals(
TransportFactory.TransportType.LOOPBACK.toString());
}
public static boolean isBleTransport(SharedPreferences sharedPreferences) {
return sharedPreferences.getString(PreferenceKeys.PORTS_TYPE,
TransportFactory.TransportType.LOOPBACK.toString()).toUpperCase().equals(
TransportFactory.TransportType.BLE.toString());
}
public static TransportFactory.TransportType getCurrentTransportType(SharedPreferences sharedPreferences) {
return TransportFactory.TransportType.valueOf(sharedPreferences.getString(PreferenceKeys.PORTS_TYPE,
TransportFactory.TransportType.LOOPBACK.toString()).toUpperCase());
}
public static boolean isFreeDvSoundModemModulation(SharedPreferences sharedPreferences) {
return sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200").startsWith("F");
}
public static int getFreeDvSoundModemModulation(SharedPreferences sharedPreferences) {
String modemType = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200");
if (modemType.startsWith("F")) {
return Integer.parseInt(modemType.substring(1));
}
return -1;
}
public static boolean isKissProtocolEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.KISS_ENABLED, true);
}
public static boolean isKissParrotEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.KISS_PARROT, false);
}
public static boolean isKissBufferedModeEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.KISS_BUFFERED_ENABLED, false);
}
public static boolean isCodec2RecorderEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.CODEC2_RECORDING_ENABLED, false);
}
public static boolean isKissScramblerEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.KISS_SCRAMBLING_ENABLED, false);
}
public static boolean isKissExtensionEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.KISS_EXTENSIONS_ENABLED, false);
}
public static String getKissScramblerKey(SharedPreferences sharedPreferences) {
return sharedPreferences.getString(PreferenceKeys.KISS_SCRAMBLER_KEY, "");
}
public static boolean isAprsEnabled(SharedPreferences sharedPreferences) {
return sharedPreferences.getBoolean(PreferenceKeys.APRS_ENABLED, false);
}
}

Wyświetl plik

@ -7,6 +7,7 @@ import androidx.preference.PreferenceManager;
import com.radio.codec2talkie.app.AppWorker;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.settings.SettingsWrapper;
import com.ustadmobile.codec2.Codec2;
public class AudioTools {
@ -48,22 +49,30 @@ public class AudioTools {
}
public static String getFreedvModeAsText(SharedPreferences sharedPreferences) {
if (sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("sound_modem")) {
String modemType = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200");
if (modemType.startsWith("F")) {
int mode = Integer.parseInt(modemType.substring(1));
switch (mode) {
case Codec2.FREEDV_MODE_700C: return "700C";
case Codec2.FREEDV_MODE_700D: return "700D";
case Codec2.FREEDV_MODE_700E: return "700E";
case Codec2.FREEDV_MODE_1600: return "1600";
case Codec2.FREEDV_MODE_800XA: return "800XA";
case Codec2.FREEDV_MODE_2020: return "2020";
case Codec2.FREEDV_MODE_2020B: return "2020B";
case Codec2.FREEDV_MODE_2400A: return "2400A";
case Codec2.FREEDV_MODE_2400B: return "2400B";
default: return null;
}
if (SettingsWrapper.isSoundModemEnabled(sharedPreferences) &&
SettingsWrapper.isFreeDvSoundModemModulation(sharedPreferences)) {
switch (SettingsWrapper.getFreeDvSoundModemModulation(sharedPreferences)) {
case Codec2.FREEDV_MODE_700C:
return "700C";
case Codec2.FREEDV_MODE_700D:
return "700D";
case Codec2.FREEDV_MODE_700E:
return "700E";
case Codec2.FREEDV_MODE_1600:
return "1600";
case Codec2.FREEDV_MODE_800XA:
return "800XA";
case Codec2.FREEDV_MODE_2020:
return "2020";
case Codec2.FREEDV_MODE_2020B:
return "2020B";
case Codec2.FREEDV_MODE_2400A:
return "2400A";
case Codec2.FREEDV_MODE_2400B:
return "2400B";
default:
return null;
}
}
return null;

Wyświetl plik

@ -4,6 +4,7 @@ import android.content.SharedPreferences;
import com.radio.codec2talkie.R;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.settings.SettingsWrapper;
public class RadioTools {
@ -15,8 +16,7 @@ public class RadioTools {
int resultBps = 0;
int maxSpeedBps = 128000;
try {
if (!sharedPreferences.getString(PreferenceKeys.PORTS_TYPE, "loopback").equals("sound_modem") &&
sharedPreferences.getBoolean(PreferenceKeys.KISS_EXTENSIONS_ENABLED, false)) {
if (!SettingsWrapper.isSoundModemEnabled(sharedPreferences) && SettingsWrapper.isKissExtensionEnabled(sharedPreferences)) {
int bw = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.KISS_EXTENSIONS_RADIO_BANDWIDTH, "125000"));
int sf = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.KISS_EXTENSIONS_RADIO_SF, "7"));
int cr = Integer.parseInt(sharedPreferences.getString(PreferenceKeys.KISS_EXTENSIONS_RADIO_CR, "5"));

Wyświetl plik

@ -10,18 +10,19 @@ import com.radio.codec2talkie.connect.BluetoothSocketHandler;
import com.radio.codec2talkie.connect.TcpIpSocketHandler;
import com.radio.codec2talkie.connect.UsbPortHandler;
import com.radio.codec2talkie.settings.PreferenceKeys;
import com.radio.codec2talkie.settings.SettingsWrapper;
import java.io.IOException;
public class TransportFactory {
public enum TransportType {
USB("usb"),
BLUETOOTH("bluetooth"),
LOOPBACK("loopback"),
TCP_IP("tcp_ip"),
BLE("ble"),
SOUND_MODEM("sound_modem");
USB("USB"),
BLUETOOTH("BLUETOOTH"),
LOOPBACK("LOOPBACK"),
TCP_IP("TCP_IP"),
BLE("BLE"),
SOUND_MODEM("SOUND_MODEM");
private final String _name;
@ -36,6 +37,7 @@ public class TransportFactory {
}
public static Transport create(TransportType transportType, Context context) throws IOException {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
switch (transportType) {
case USB:
@ -47,16 +49,10 @@ public class TransportFactory {
case BLE:
return new Ble(BleHandler.getGatt(), BleHandler.getName());
case SOUND_MODEM:
return isFreeDv(context) ? new SoundModem(context) : new SoundModemFsk(context);
return SettingsWrapper.isFreeDvSoundModemModulation(sharedPreferences) ? new SoundModem(context) : new SoundModemFsk(context);
case LOOPBACK:
default:
return new Loopback();
}
}
private static boolean isFreeDv(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String modemType = sharedPreferences.getString(PreferenceKeys.PORTS_SOUND_MODEM_TYPE, "1200");
return modemType.startsWith("F");
}
}

Wyświetl plik

@ -361,12 +361,12 @@
</string-array>
<string-array name="ports_type_values">
<item>loopback</item>
<item>bluetooth</item>
<item>ble</item>
<item>tcp_ip</item>
<item>usb</item>
<item>sound_modem</item>
<item>LOOPBACK</item>
<item>BLUETOOTH</item>
<item>BLE</item>
<item>TCP_IP</item>
<item>USB</item>
<item>SOUND_MODEM</item>
</string-array>
<string-array name="ports_sound_modem_rig_entries">