FT8CN/ft8cn/app/src/main/java/com/bg7yoz/ft8cn/ui/ConfigFragment.java

1418 wiersze
56 KiB
Java
Czysty Wina Historia

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.bg7yoz.ft8cn.ui;
/**
* 设置界面。
* @author BGY70Z
* @date 2023-03-20
*/
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CompoundButton;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import com.bg7yoz.ft8cn.FAQActivity;
import com.bg7yoz.ft8cn.Ft8Message;
import com.bg7yoz.ft8cn.GeneralVariables;
import com.bg7yoz.ft8cn.MainViewModel;
import com.bg7yoz.ft8cn.R;
import com.bg7yoz.ft8cn.connector.ConnectMode;
import com.bg7yoz.ft8cn.database.ControlMode;
import com.bg7yoz.ft8cn.database.OperationBand;
import com.bg7yoz.ft8cn.database.RigNameList;
import com.bg7yoz.ft8cn.databinding.FragmentConfigBinding;
import com.bg7yoz.ft8cn.ft8signal.FT8Package;
import com.bg7yoz.ft8cn.maidenhead.MaidenheadGrid;
import com.bg7yoz.ft8cn.rigs.InstructionSet;
import com.bg7yoz.ft8cn.timer.UtcTimer;
import java.io.IOException;
/**
* A simple {@link Fragment} subclass.
* create an instance of this fragment.
*/
public class ConfigFragment extends Fragment {
private static final String TAG = "ConfigFragment";
private MainViewModel mainViewModel;
private FragmentConfigBinding binding;
private BandsSpinnerAdapter bandsSpinnerAdapter;
private BauRateSpinnerAdapter bauRateSpinnerAdapter;
private SerialDataBitsSpinnerAdapter dataBitsSpinnerAdapter;
private SerialParityBitsSpinnerAdapter parityBitsSpinnerAdapter;
private SerialStopBitsSpinnerAdapter stopBitsSpinnerAdapter;
private RigNameSpinnerAdapter rigNameSpinnerAdapter;
private LaunchSupervisionSpinnerAdapter launchSupervisionSpinnerAdapter;
private PttDelaySpinnerAdapter pttDelaySpinnerAdapter;
private NoReplyLimitSpinnerAdapter noReplyLimitSpinnerAdapter;
//private SerialPortSpinnerAdapter serialPortSpinnerAdapter;
public ConfigFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//我的网格位置
private final TextWatcher onGridEditorChanged = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
//String s = "";
StringBuilder s=new StringBuilder();
for (int j = 0; j < binding.inputMyGridEdit.getText().length(); j++) {
if (j < 2) {
//s = s + Character.toUpperCase(binding.inputMyGridEdit.getText().charAt(j));
s.append(Character.toUpperCase(binding.inputMyGridEdit.getText().charAt(j)));
} else {
//s = s + Character.toLowerCase(binding.inputMyGridEdit.getText().charAt(j));
s.append(Character.toLowerCase(binding.inputMyGridEdit.getText().charAt(j)));
}
}
writeConfig("grid", s.toString());
GeneralVariables.setMyMaidenheadGrid(s.toString());
}
};
//我的呼号
private final TextWatcher onMyCallEditorChanged = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
writeConfig("callsign", editable.toString().toUpperCase().trim());
String callsign = editable.toString().toUpperCase().trim();
if (callsign.length() > 0) {
Ft8Message.hashList.addHash(FT8Package.getHash22(callsign), callsign);
Ft8Message.hashList.addHash(FT8Package.getHash12(callsign), callsign);
Ft8Message.hashList.addHash(FT8Package.getHash10(callsign), callsign);
}
GeneralVariables.myCallsign = (editable.toString().toUpperCase().trim());
}
};
//发射频率
private final TextWatcher onFreqEditorChanged = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
setfreq(editable.toString());
}
};
//发射延迟时间
private final TextWatcher onTransDelayEditorChanged = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
int transDelay = 1000;
if (editable.toString().matches("^\\d{1,4}$")) {
transDelay = Integer.parseInt(editable.toString());
}
GeneralVariables.transmitDelay = transDelay;
mainViewModel.ft8TransmitSignal.setTimer_sec(GeneralVariables.transmitDelay);
writeConfig("transDelay", Integer.toString(transDelay));
}
};
//排除的呼号前缀
private final TextWatcher onExcludedCallsigns=new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
GeneralVariables.addExcludedCallsigns(editable.toString());
writeConfig("excludedCallsigns", GeneralVariables.getExcludeCallsigns());
}
};
//修饰符
private final TextWatcher onModifierEditorChanged = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.toString().toUpperCase().trim().matches("[0-9]{3}|[A-Z]{1,4}")
||editable.toString().trim().length()==0){
binding.modifierEdit.setTextColor(requireContext().getColor(R.color.text_view_color));
GeneralVariables.toModifier=editable.toString().toUpperCase().trim();
writeConfig("toModifier", GeneralVariables.toModifier);
}else{
binding.modifierEdit.setTextColor(requireContext().getColor(R.color.text_view_error_color));
}
}
};
//CI-V地址
private final TextWatcher onCIVAddressEditorChanged = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.toString().length() < 2) {
return;
}
String s = "0x" + editable.toString();
if (s.matches("\\b0[xX][0-9a-fA-F]+\\b")) {//匹配十六进制
String temp = editable.toString().substring(0, 2).toUpperCase();
writeConfig("civ", temp);
GeneralVariables.civAddress = Integer.parseInt(temp, 16);
mainViewModel.setCivAddress();
}
}
};
@SuppressLint("DefaultLocale")
private void setfreq(String sFreq) {
float freq;
try {
freq = Float.parseFloat(sFreq);
if (freq < 100) {
freq = 100;
}
if (freq > 2900) {
freq = 2900;
}
} catch (Exception e
) {
freq = 1000;
}
writeConfig("freq", String.format("%.0f", freq));
GeneralVariables.setBaseFrequency(freq);
}
@SuppressLint("SetTextI18n")
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mainViewModel = MainViewModel.getInstance(this);
binding = FragmentConfigBinding.inflate(inflater, container, false);
//设置时间偏移
setUtcTimeOffsetSpinner();
//设置PTT延时
setPttDelaySpinner();
//设置操作频段
setBandsSpinner();
//设置波特率列表
setBauRateSpinner();
//设置数据位列表
setDataBitsSpinner();
//设置校验位
setParityBitsSpinner();
//设置停止位
setStopBitsSpinner();
//设置电台名称,参数列表
setRigNameSpinner();
//设置解码模式
setDecodeMode();
//设置音频输出的位数
setAudioOutputBitsMode();
//设置音频输出采样率
setAudioOutputRateMode();
//设置显示消息模式
setMessageMode();
//设置控制模式 VOX CAT
setControlMode();
//设置连线的方式
setConnectMode();
//设置发射监管列表
setLaunchSupervision();
//设置帮助对话框
setHelpDialog();
//设置无回应次数中断
setNoReplyLimitSpinner();
//设置各个spinner的OnItemSelected事件
setSpinnerOnItemSelected();
//显示滚动箭头
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setScrollImageVisible();
}
}, 1000);
binding.scrollView3.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View view, int i, int i1, int i2, int i3) {
setScrollImageVisible();
}
});
//FAQ按钮的onClick
binding.faqButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(requireContext(), FAQActivity.class);
startActivity(intent);
}
});
//梅登海德网格
binding.inputMyGridEdit.removeTextChangedListener(onGridEditorChanged);
binding.inputMyGridEdit.setText(GeneralVariables.getMyMaidenheadGrid());
binding.inputMyGridEdit.addTextChangedListener(onGridEditorChanged);
//我的呼号
binding.inputMycallEdit.removeTextChangedListener(onMyCallEditorChanged);
binding.inputMycallEdit.setText(GeneralVariables.myCallsign);
binding.inputMycallEdit.addTextChangedListener(onMyCallEditorChanged);
//修饰符
binding.modifierEdit.removeTextChangedListener(onModifierEditorChanged);
binding.modifierEdit.setText(GeneralVariables.toModifier);
binding.modifierEdit.addTextChangedListener(onModifierEditorChanged);
//发射频率
binding.inputFreqEditor.removeTextChangedListener(onFreqEditorChanged);
binding.inputFreqEditor.setText(GeneralVariables.getBaseFrequencyStr());
binding.inputFreqEditor.addTextChangedListener(onFreqEditorChanged);
//CIV地址
binding.civAddressEdit.removeTextChangedListener(onCIVAddressEditorChanged);
binding.civAddressEdit.setText(GeneralVariables.getCivAddressStr());
binding.civAddressEdit.addTextChangedListener(onCIVAddressEditorChanged);
//发射延迟
binding.inputTransDelayEdit.removeTextChangedListener(onTransDelayEditorChanged);
binding.inputTransDelayEdit.setText(GeneralVariables.getTransmitDelayStr());
binding.inputTransDelayEdit.addTextChangedListener(onTransDelayEditorChanged);
binding.excludedCallsignEdit.removeTextChangedListener(onExcludedCallsigns);
binding.excludedCallsignEdit.setText(GeneralVariables.getExcludeCallsigns());
binding.excludedCallsignEdit.addTextChangedListener(onExcludedCallsigns);
//设置同频发射开关
binding.synFrequencySwitch.setOnCheckedChangeListener(null);
binding.synFrequencySwitch.setChecked(GeneralVariables.synFrequency);
setSyncFreqText();//设置开关的文本
binding.synFrequencySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (binding.synFrequencySwitch.isChecked()) {
mainViewModel.databaseOpr.writeConfig("synFreq", "1", null);
} else {
mainViewModel.databaseOpr.writeConfig("synFreq", "0", null);
setfreq(binding.inputFreqEditor.getText().toString());
}
GeneralVariables.synFrequency = binding.synFrequencySwitch.isChecked();
setSyncFreqText();
binding.inputFreqEditor.setEnabled(!binding.synFrequencySwitch.isChecked());
}
});
//设置PTT延迟
binding.pttDelayOffsetSpinner.setSelection(GeneralVariables.pttDelay / 10);
//获取操作的波段
binding.operationBandSpinner.setSelection(GeneralVariables.bandListIndex);
//获取电台型号
binding.rigNameSpinner.setSelection(GeneralVariables.modelNo);
//串口数据位
binding.dataBitsSpinner.setSelection(dataBitsSpinnerAdapter.getPosition(GeneralVariables.serialDataBits));
//串口停止位
binding.stopBitsSpinner.setSelection(stopBitsSpinnerAdapter.getPosition(GeneralVariables.serialStopBits));
binding.parityBitsSpinner.setSelection(parityBitsSpinnerAdapter.getPosition(GeneralVariables.serialParity));
//获取波特率
binding.baudRateSpinner.setSelection(bauRateSpinnerAdapter.getPosition(
GeneralVariables.baudRate));
//设置发射监管
binding.launchSupervisionSpinner.setSelection(launchSupervisionSpinnerAdapter
.getPosition(GeneralVariables.launchSupervision));
//设置无回应中断
binding.noResponseCountSpinner.setSelection(GeneralVariables.noReplyLimit);
//设置自动关注CQ
binding.followCQSwitch.setOnCheckedChangeListener(null);
binding.followCQSwitch.setChecked(GeneralVariables.autoFollowCQ);
setAutoFollowCQText();
binding.followCQSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
GeneralVariables.autoFollowCQ = binding.followCQSwitch.isChecked();
if (binding.followCQSwitch.isChecked()) {
mainViewModel.databaseOpr.writeConfig("autoFollowCQ", "1", null);
} else {
mainViewModel.databaseOpr.writeConfig("autoFollowCQ", "0", null);
}
setAutoFollowCQText();
}
});
//设置自动呼叫关注的呼号
binding.autoCallfollowSwitch.setOnCheckedChangeListener(null);
binding.autoCallfollowSwitch.setChecked(GeneralVariables.autoCallFollow);
setAutoCallFollow();
binding.autoCallfollowSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
GeneralVariables.autoCallFollow = binding.autoCallfollowSwitch.isChecked();
if (binding.autoCallfollowSwitch.isChecked()) {
mainViewModel.databaseOpr.writeConfig("autoCallFollow", "1", null);
} else {
mainViewModel.databaseOpr.writeConfig("autoCallFollow", "0", null);
}
setAutoCallFollow();
}
});
//设置保存SWL选项
binding.saveSWLSwitch.setOnCheckedChangeListener(null);
binding.saveSWLSwitch.setChecked(GeneralVariables.saveSWLMessage);
setSaveSwl();
binding.saveSWLSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
GeneralVariables.saveSWLMessage = binding.saveSWLSwitch.isChecked();
if (binding.saveSWLSwitch.isChecked()) {
mainViewModel.databaseOpr.writeConfig("saveSWL", "1", null);
} else {
mainViewModel.databaseOpr.writeConfig("saveSWL", "0", null);
}
setSaveSwl();
}
});
//设置保存SWL选项
binding.saveSWLQSOSwitch.setOnCheckedChangeListener(null);
binding.saveSWLQSOSwitch.setChecked(GeneralVariables.saveSWLMessage);
setSaveSwlQSO();
binding.saveSWLQSOSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
GeneralVariables.saveSWL_QSO = binding.saveSWLQSOSwitch.isChecked();
if (binding.saveSWLQSOSwitch.isChecked()) {
mainViewModel.databaseOpr.writeConfig("saveSWLQSO", "1", null);
} else {
mainViewModel.databaseOpr.writeConfig("saveSWLQSO", "0", null);
}
setSaveSwlQSO();
}
});
//获取梅登海德网格
binding.configGetGridImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String grid = MaidenheadGrid.getMyMaidenheadGrid(getContext());
if (!grid.equals("")) {
binding.inputMyGridEdit.setText(grid);
}
}
});
//串口默认值设置复位键
binding.serialDefaultButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
GeneralVariables.serialParity = 0;
GeneralVariables.serialDataBits = 8;
GeneralVariables.serialStopBits = 1;
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
binding.parityBitsSpinner.setSelection(
parityBitsSpinnerAdapter.getPosition(GeneralVariables.serialParity));
binding.dataBitsSpinner.setSelection(
dataBitsSpinnerAdapter.getPosition(GeneralVariables.serialDataBits));
binding.stopBitsSpinner.setSelection(
stopBitsSpinnerAdapter.getPosition(GeneralVariables.serialStopBits));
}
});
}
});
return binding.getRoot();
}
/**
* 设置各个spinner的OnItemSelected事件防止在进入主界面时重复向数据库写入配置信息
*/
private void setSpinnerOnItemSelected(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
binding.pttDelayOffsetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.pttDelay = i * 10;
writeConfig("pttDelay", String.valueOf(GeneralVariables.pttDelay));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
binding.operationBandSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.bandListIndex = i;
GeneralVariables.band = OperationBand.getBandFreq(i);//把当前的频段保存下来
mainViewModel.databaseOpr.getAllQSLCallsigns();//通联成功的呼号读出来
writeConfig("bandFreq", String.valueOf(GeneralVariables.band));
if (GeneralVariables.controlMode == ControlMode.CAT//CAT、RTS、DTR模式下控制电台
|| GeneralVariables.controlMode == ControlMode.RTS
|| GeneralVariables.controlMode == ControlMode.DTR) {
//如果在CAT、RTS模式下修改电台的频率
mainViewModel.setOperationBand();
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
binding.rigNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.modelNo = i;
writeConfig("model", String.valueOf(i));
setAddrAndBauRate(rigNameSpinnerAdapter.getRigName(i));
//指令集
GeneralVariables.instructionSet = rigNameSpinnerAdapter.getRigName(i).instructionSet;
writeConfig("instruction", String.valueOf(GeneralVariables.instructionSet));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
binding.baudRateSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.baudRate = bauRateSpinnerAdapter.getValue(i);
writeConfig("baudRate", String.valueOf(GeneralVariables.baudRate));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
binding.launchSupervisionSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.launchSupervision = LaunchSupervisionSpinnerAdapter.getTimeOut(i);
writeConfig("launchSupervision", String.valueOf(GeneralVariables.launchSupervision));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
binding.noResponseCountSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.noReplyLimit = i;
writeConfig("noReplyLimit", String.valueOf(GeneralVariables.noReplyLimit));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
//串口数据位
binding.dataBitsSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.serialDataBits = dataBitsSpinnerAdapter.getValue(i);
writeConfig("dataBits", String.valueOf(GeneralVariables.serialDataBits));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
//串口停止位
binding.stopBitsSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.serialStopBits = stopBitsSpinnerAdapter.getValue(i);
writeConfig("stopBits", String.valueOf(GeneralVariables.serialStopBits));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
//校验位
binding.parityBitsSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
GeneralVariables.serialParity = parityBitsSpinnerAdapter.getValue(i);
writeConfig("parityBits", String.valueOf(GeneralVariables.serialParity));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}, 1000);
}
/**
* 设置地址和波特率,指令集
*
* @param rigName 电台型号
*/
private void setAddrAndBauRate(RigNameList.RigName rigName) {
GeneralVariables.civAddress = rigName.address;
mainViewModel.setCivAddress();
GeneralVariables.baudRate = rigName.bauRate;
binding.civAddressEdit.setText(String.format("%X", rigName.address));
binding.baudRateSpinner.setSelection(
bauRateSpinnerAdapter.getPosition(rigName.bauRate));
}
/**
* 设置同频发射开关的显示文本
*/
private void setSyncFreqText() {
if (binding.synFrequencySwitch.isChecked()) {
binding.synFrequencySwitch.setText(getString(R.string.freq_syn));
} else {
binding.synFrequencySwitch.setText(getString(R.string.freq_asyn));
}
}
/**
* 设置自动关注CQ开关的文本
*/
private void setAutoFollowCQText() {
if (binding.followCQSwitch.isChecked()) {
binding.followCQSwitch.setText(getString(R.string.auto_follow_cq));
} else {
binding.followCQSwitch.setText(getString(R.string.not_concerned_about_CQ));
}
}
//设置自动呼叫关注的呼号
private void setAutoCallFollow() {
if (binding.autoCallfollowSwitch.isChecked()) {
binding.autoCallfollowSwitch.setText(getString(R.string.automatic_call_following));
} else {
binding.autoCallfollowSwitch.setText(getString(R.string.do_not_call_the_following_callsign));
}
}
private void setSaveSwl() {
if (binding.saveSWLSwitch.isChecked()) {
binding.saveSWLSwitch.setText(getString(R.string.config_save_swl));
} else {
binding.saveSWLSwitch.setText(getString(R.string.config_donot_save_swl));
}
}
private void setSaveSwlQSO() {
if (binding.saveSWLQSOSwitch.isChecked()) {
binding.saveSWLQSOSwitch.setText(getString(R.string.config_save_swl_qso));
} else {
binding.saveSWLQSOSwitch.setText(getString(R.string.config_donot_save_swl_qso));
}
}
/**
* 设置UTC时间偏移的spinner
*/
private void setUtcTimeOffsetSpinner() {
UtcOffsetSpinnerAdapter adapter = new UtcOffsetSpinnerAdapter(requireContext());
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
binding.utcTimeOffsetSpinner.setAdapter(adapter);
adapter.notifyDataSetChanged();
binding.utcTimeOffsetSpinner.setSelection((UtcTimer.delay / 100 + 75) / 5);
}
});
binding.utcTimeOffsetSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
UtcTimer.delay = i * 500 - 7500;//设置延迟
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
/**
* 设置操作频段的spinner
*/
private void setBandsSpinner() {
GeneralVariables.mutableBandChange.observe(getViewLifecycleOwner(), new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
binding.operationBandSpinner.setSelection(integer);
}
});
bandsSpinnerAdapter = new BandsSpinnerAdapter(requireContext());
binding.operationBandSpinner.setAdapter(bandsSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
bandsSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置波特率列表
*/
private void setBauRateSpinner() {
bauRateSpinnerAdapter = new BauRateSpinnerAdapter(requireContext());
binding.baudRateSpinner.setAdapter(bauRateSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
bauRateSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置数据位列表
*/
private void setDataBitsSpinner(){
dataBitsSpinnerAdapter = new SerialDataBitsSpinnerAdapter(requireContext());
binding.dataBitsSpinner.setAdapter(dataBitsSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
dataBitsSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置校验位列表
*/
private void setParityBitsSpinner(){
parityBitsSpinnerAdapter = new SerialParityBitsSpinnerAdapter(requireContext());
binding.parityBitsSpinner.setAdapter(parityBitsSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
parityBitsSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置停止位列表
*/
private void setStopBitsSpinner(){
stopBitsSpinnerAdapter = new SerialStopBitsSpinnerAdapter(requireContext());
binding.stopBitsSpinner.setAdapter(stopBitsSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
stopBitsSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置无回应次数中断
*/
private void setNoReplyLimitSpinner() {
noReplyLimitSpinnerAdapter = new NoReplyLimitSpinnerAdapter(requireContext());
binding.noResponseCountSpinner.setAdapter(noReplyLimitSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
noReplyLimitSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置发射监管列表
*/
private void setLaunchSupervision() {
launchSupervisionSpinnerAdapter = new LaunchSupervisionSpinnerAdapter(requireContext());
binding.launchSupervisionSpinner.setAdapter(launchSupervisionSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
launchSupervisionSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置电台名称,参数列表
*/
private void setRigNameSpinner() {
rigNameSpinnerAdapter = new RigNameSpinnerAdapter(requireContext());
binding.rigNameSpinner.setAdapter(rigNameSpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
rigNameSpinnerAdapter.notifyDataSetChanged();
}
});
}
/**
* 设置PTT延时
*/
private void setPttDelaySpinner() {
pttDelaySpinnerAdapter = new PttDelaySpinnerAdapter(requireContext());
binding.pttDelayOffsetSpinner.setAdapter(pttDelaySpinnerAdapter);
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
pttDelaySpinnerAdapter.notifyDataSetChanged();
binding.pttDelayOffsetSpinner.setSelection(GeneralVariables.pttDelay / 10);
}
});
}
private void setDecodeMode() {
binding.decodeModeRadioGroup.clearCheck();
binding.fastDecodeRadioButton.setChecked(!GeneralVariables.deepDecodeMode);
binding.deepDecodeRadioButton.setChecked(GeneralVariables.deepDecodeMode);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int buttonId = binding.decodeModeRadioGroup.getCheckedRadioButtonId();
GeneralVariables.deepDecodeMode= buttonId ==binding.deepDecodeRadioButton.getId();
writeConfig("deepMode", GeneralVariables.deepDecodeMode? "1" : "0");
}
};
binding.fastDecodeRadioButton.setOnClickListener(listener);
binding.deepDecodeRadioButton.setOnClickListener(listener);
}
/**
* 设置音频输出的位数
*/
private void setAudioOutputBitsMode() {
//binding.controlModeRadioGroup.setOnCheckedChangeListener(null);
binding.audioBitsRadioGroup.clearCheck();
binding.audio32BitsRadioButton.setChecked(GeneralVariables.audioOutput32Bit);
binding.audio16BitsRadioButton.setChecked(!GeneralVariables.audioOutput32Bit);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int buttonId = binding.audioBitsRadioGroup.getCheckedRadioButtonId();
GeneralVariables.audioOutput32Bit= buttonId ==binding.audio32BitsRadioButton.getId();
writeConfig("audioBits", GeneralVariables.audioOutput32Bit? "1" : "0");
}
};
binding.audio32BitsRadioButton.setOnClickListener(listener);
binding.audio16BitsRadioButton.setOnClickListener(listener);
}
/**
* 输出音频的采样率设置
*/
private void setAudioOutputRateMode() {
binding.audioRateRadioGroup.clearCheck();
binding.audio12kRadioButton.setChecked(GeneralVariables.audioSampleRate==12000);
binding.audio24kRadioButton.setChecked(GeneralVariables.audioSampleRate==24000);
binding.audio48kRadioButton.setChecked(GeneralVariables.audioSampleRate==48000);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
if (binding.audio12kRadioButton.isChecked()) GeneralVariables.audioSampleRate=12000;
if (binding.audio24kRadioButton.isChecked()) GeneralVariables.audioSampleRate=24000;
if (binding.audio48kRadioButton.isChecked()) GeneralVariables.audioSampleRate=48000;
writeConfig("audioRate", String.valueOf(GeneralVariables.audioSampleRate));
}
};
binding.audio12kRadioButton.setOnClickListener(listener);
binding.audio24kRadioButton.setOnClickListener(listener);
binding.audio48kRadioButton.setOnClickListener(listener);
}
/**
* 设置消息列表显示模式
*/
private void setMessageMode() {
binding.messageModeRadioGroup.clearCheck();
if (GeneralVariables.simpleCallItemMode){
binding.msgSimpleRadioButton.setChecked(true);
}else {
binding.msgStandardRadioButton.setChecked(true);
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int buttonId = binding.messageModeRadioGroup.getCheckedRadioButtonId();
GeneralVariables.simpleCallItemMode=
binding.messageModeRadioGroup.getCheckedRadioButtonId()
==binding.msgSimpleRadioButton.getId();
writeConfig("msgMode", GeneralVariables.simpleCallItemMode?"1":"0");
}
};
binding.msgStandardRadioButton.setOnClickListener(listener);
binding.msgSimpleRadioButton.setOnClickListener(listener);
}
/**
* 设置控制模式VOX CAT
*/
private void setControlMode() {
//binding.controlModeRadioGroup.setOnCheckedChangeListener(null);
binding.controlModeRadioGroup.clearCheck();
switch (GeneralVariables.controlMode) {
case ControlMode.CAT:
case ConnectMode.NETWORK:
binding.ctrCATradioButton.setChecked(true);
break;
case ControlMode.RTS:
binding.ctrRTSradioButton.setChecked(true);
break;
case ControlMode.DTR:
binding.ctrDTRradioButton.setChecked(true);
break;
default:
binding.ctrVOXradioButton.setChecked(true);
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int buttonId = binding.controlModeRadioGroup.getCheckedRadioButtonId();
if (buttonId == binding.ctrVOXradioButton.getId()) {
GeneralVariables.controlMode = ControlMode.VOX;
} else if (buttonId == binding.ctrCATradioButton.getId()) {//CAT模式
GeneralVariables.controlMode = ControlMode.CAT;
} else if (buttonId == binding.ctrRTSradioButton.getId()) {//RTS模式
GeneralVariables.controlMode = ControlMode.RTS;
} else if (buttonId == binding.ctrDTRradioButton.getId()) {//RTS模式
GeneralVariables.controlMode = ControlMode.DTR;
}
mainViewModel.setControlMode();//通知一下电台控制模式改变
//无论CAT还是RTSCI-V指令还是有效的都是串口
if (GeneralVariables.controlMode == ControlMode.CAT
|| GeneralVariables.controlMode == ControlMode.RTS
|| GeneralVariables.controlMode == ControlMode.DTR) {
if (!mainViewModel.isRigConnected()) {
mainViewModel.getUsbDevice();
} else {
mainViewModel.setOperationBand();
}
}
writeConfig("ctrMode", String.valueOf(GeneralVariables.controlMode));
setConnectMode();
}
};
binding.ctrCATradioButton.setOnClickListener(listener);
binding.ctrVOXradioButton.setOnClickListener(listener);
binding.ctrRTSradioButton.setOnClickListener(listener);
binding.ctrDTRradioButton.setOnClickListener(listener);
}
/**
* 设置连线的方式可以是USB也可以是BLUE_TOOTH
*/
private void setConnectMode() {
if ((GeneralVariables.controlMode == ControlMode.CAT)
//&& BluetoothConstants.checkBluetoothIsOpen()
) {
//此处要改成VISIBLE
binding.connectModeLayout.setVisibility(View.VISIBLE);
binding.serialLayout.setVisibility(View.VISIBLE);
} else {
binding.connectModeLayout.setVisibility(View.GONE);
binding.serialLayout.setVisibility(View.GONE);
}
binding.connectModeRadioGroup.clearCheck();
switch (GeneralVariables.connectMode) {
case ConnectMode.USB_CABLE:
binding.cableConnectRadioButton.setChecked(true);
break;
case ConnectMode.BLUE_TOOTH:
binding.bluetoothConnectRadioButton.setChecked(true);
break;
case ConnectMode.NETWORK:
binding.networkConnectRadioButton.setChecked(true);
break;
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int buttonId = binding.connectModeRadioGroup.getCheckedRadioButtonId();
if (buttonId == binding.cableConnectRadioButton.getId()) {
GeneralVariables.connectMode = ConnectMode.USB_CABLE;
} else if (buttonId == binding.bluetoothConnectRadioButton.getId()) {
GeneralVariables.connectMode = ConnectMode.BLUE_TOOTH;
}else if (buttonId==binding.networkConnectRadioButton.getId()){
GeneralVariables.connectMode=ConnectMode.NETWORK;
}
//------显示蓝牙列表,并选择,然后建立蓝牙连接
if (GeneralVariables.connectMode == ConnectMode.BLUE_TOOTH) {
//根据安卓12要判断一下蓝牙权限
new SelectBluetoothDialog(requireContext(), mainViewModel).show();
}
//-----显示网络上的电台目前是flex电台-------------------
if (GeneralVariables.connectMode==ConnectMode.NETWORK){
//打开网络电台列表对话框
if (GeneralVariables.instructionSet== InstructionSet.FLEX_NETWORK) {
new SelectFlexRadioDialog(requireContext(), mainViewModel).show();
}else if (GeneralVariables.instructionSet== InstructionSet.XIEGU_6100_FT8CNS) {
new SelectXieguRadioDialog(requireContext(), mainViewModel).show();
}
else if(GeneralVariables.instructionSet== InstructionSet.ICOM
||GeneralVariables.instructionSet== InstructionSet.XIEGU_6100
||GeneralVariables.instructionSet== InstructionSet.XIEGUG90S) {
new LoginIcomRadioDialog(requireContext(), mainViewModel).show();
}else {
ToastMessage.show(GeneralVariables.getStringFromResource(R.string.only_flex_supported));
}
}
}
};
binding.cableConnectRadioButton.setOnClickListener(listener);
binding.bluetoothConnectRadioButton.setOnClickListener(listener);
binding.networkConnectRadioButton.setOnClickListener(listener);
}
/**
* 把配置信息写到数据库
*
* @param KeyName 关键词
* @param Value 值
*/
private void writeConfig(String KeyName, String Value) {
mainViewModel.databaseOpr.writeConfig(KeyName, Value, null);
}
private void setHelpDialog() {
//呼号帮助
binding.callsignHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.callsign_help)
, true).show();
}
});
//梅登海德网格的帮助
binding.maidenGridImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.maidenhead_help)
, true).show();
}
});
//发射频率的帮助
binding.frequencyImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.frequency_help)
, true).show();
}
});
//延迟发射帮助
binding.transDelayImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.transDelay_help)
, true).show();
}
});
//时间偏移帮助
binding.timeOffsetImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.timeoffset_help)
, true).show();
}
});
//PTT延时帮助
binding.pttDelayImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.pttdelay_help)
, true).show();
}
});
//设置串口参数帮助
binding.serialHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.serial_setting_help)
, true).show();
}
});
//显示列表方式
binding.messageModeeHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(),requireActivity()
,GeneralVariables.getStringFromResource(R.string.message_mode_help)
,true).show();
}
});
//设置ABOUT
binding.aboutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity(), "readme.txt", true).show();
}
});
//设置操作频段
binding.operationHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.operationBand_help)
, true).show();
}
});
//设置操作模式
binding.controlModeHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.controlMode_help)
, true).show();
}
});
//设置CI-V地址和波特率帮助
binding.baudRateHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.civ_help)
, true).show();
}
});
//电台型号列表
binding.rigNameHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.rig_model_help)
, true).show();
}
});
//发射监管
binding.launchSupervisionImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.launch_supervision_help)
, true).show();
}
});
//无回应次数
binding.noResponseCountButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.no_response_help)
, true).show();
}
});
//自动呼叫
binding.autoFollowCountButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.auto_follow_help)
, true).show();
}
});
//连接模式
binding.connectModeHelpImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.connectMode_help)
, true).show();
}
});
//排除选项
binding.excludedHelpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.excludeCallsign_help)
, true).show();
}
});
binding.swlHelpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.swlMode_help)
, true).show();
}
});
//解码模式
binding.decodeModeHelpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(),requireActivity()
,GeneralVariables.getStringFromResource(R.string.deep_mode_help)
,true).show();
}
});
//音频输出帮助
binding.audioOutputImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.audio_output_help)
, true).show();
}
});
//清除缓存
binding.clearCacheHelpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new HelpDialog(requireContext(), requireActivity()
, GeneralVariables.getStringFromResource(R.string.clear_cache_data_help)
, true).show();
}
});
binding.clearFollowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ClearCacheDataDialog(requireContext(), requireActivity()
,mainViewModel.databaseOpr
,ClearCacheDataDialog.CACHE_MODE.FOLLOW_DATA).show();
}
});
binding.clearLogCacheButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ClearCacheDataDialog(requireContext(), requireActivity()
,mainViewModel.databaseOpr
,ClearCacheDataDialog.CACHE_MODE.SWL_MSG).show();
}
});
binding.clearSWlQsoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ClearCacheDataDialog(requireContext(), requireActivity()
,mainViewModel.databaseOpr
,ClearCacheDataDialog.CACHE_MODE.SWL_QSO).show();
}
});
binding.synTImeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UtcTimer.syncTime(new UtcTimer.AfterSyncTime() {
@Override
public void doAfterSyncTimer(int secTime) {
setUtcTimeOffsetSpinner();
if (secTime>100) {//正数时慢了
ToastMessage.show(String.format(GeneralVariables
.getStringFromResource(R.string.utc_time_sync_delay_slow), secTime));
}else if (secTime<-100){
ToastMessage.show(String.format(GeneralVariables
.getStringFromResource(R.string.utc_time_sync_delay_faster), -secTime));
}else {
ToastMessage.show(GeneralVariables
.getStringFromResource(R.string.config_clock_is_accurate));
}
}
@Override
public void syncFailed(IOException e) {
ToastMessage.show(e.getMessage());
}
});
}
});
}
/**
* 设置界面的上下滚动的图标
*/
private void setScrollImageVisible() {
if (binding.scrollView3.getScrollY() == 0) {
binding.configScrollUpImageView.setVisibility(View.GONE);
} else {
binding.configScrollUpImageView.setVisibility(View.VISIBLE);
}
if (binding.scrollView3.getHeight() + binding.scrollView3.getScrollY()
< binding.scrollLinearLayout.getMeasuredHeight()) {
binding.configScrollDownImageView.setVisibility(View.VISIBLE);
} else {
binding.configScrollDownImageView.setVisibility(View.GONE);
}
}
}