Skip to content

Commit 55da877

Browse files
authored
feat: added Position Controls (#2471)
1 parent d7501ee commit 55da877

File tree

6 files changed

+247
-29
lines changed

6 files changed

+247
-29
lines changed

app/src/main/java/io/pslab/activity/OscilloscopeActivity.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ public class OscilloscopeActivity extends GuideActivity implements View.OnClickL
134134
public String curveFittingChannel2;
135135
public String xyPlotXAxisChannel;
136136
public String xyPlotYAxisChannel;
137+
public HashMap<String, Double> xOffsets;
138+
public HashMap<String, Double> yOffsets;
137139
public double trigger;
138140
public Plot2D graph;
139141
@BindView(R.id.layout_dock_os1)
@@ -268,6 +270,18 @@ public void onSystemUiVisibilityChange(int i) {
268270
timebase = 875;
269271
samples = 512;
270272
timeGap = 2;
273+
274+
xOffsets = new HashMap<>();
275+
xOffsets.put(CHANNEL.CH1.toString(), 0.0);
276+
xOffsets.put(CHANNEL.CH2.toString(), 0.0);
277+
xOffsets.put(CHANNEL.CH3.toString(), 0.0);
278+
xOffsets.put(CHANNEL.MIC.toString(), 0.0);
279+
yOffsets = new HashMap<>();
280+
yOffsets.put(CHANNEL.CH1.toString(), 0.0);
281+
yOffsets.put(CHANNEL.CH2.toString(), 0.0);
282+
yOffsets.put(CHANNEL.CH3.toString(), 0.0);
283+
yOffsets.put(CHANNEL.MIC.toString(), 0.0);
284+
271285
sineFit = true;
272286
squareFit = false;
273287
isDataAnalysisFragSelected = false;
@@ -1134,6 +1148,16 @@ protected void onPostExecute(Void aVoid) {
11341148
dataParamsChannels = paramsChannels.clone();
11351149

11361150
List<ILineDataSet> dataSets = new ArrayList<>();
1151+
if (!isFourierTransformSelected) {
1152+
for (int i = 0; i < Math.min(entries.size(), paramsChannels.length); i++) {
1153+
ArrayList<Entry> entryArrayList = entries.get(i);
1154+
for (int j = 0; j < entryArrayList.size(); j++) {
1155+
Entry entry = entryArrayList.get(j);
1156+
entry.setX((float) (entry.getX() - xOffsets.get(paramsChannels[i])));
1157+
entry.setY((float) (entry.getY() + yOffsets.get(paramsChannels[i])));
1158+
}
1159+
}
1160+
}
11371161
for (int i = 0; i < Math.min(entries.size(), paramsChannels.length); i++) {
11381162
LineDataSet dataSet;
11391163
dataSet = new LineDataSet(entries.get(i), paramsChannels[i]);

app/src/main/java/io/pslab/fragment/DataAnalysisFragment.java

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.pslab.fragment;
22

33
import android.os.Bundle;
4+
45
import androidx.fragment.app.Fragment;
56

67
import android.view.LayoutInflater;
@@ -10,17 +11,26 @@
1011
import android.widget.ArrayAdapter;
1112
import android.widget.CheckBox;
1213
import android.widget.CompoundButton;
14+
import android.widget.SeekBar;
1315
import android.widget.Spinner;
16+
import android.widget.TextView;
1417

1518
import io.pslab.R;
1619
import io.pslab.activity.OscilloscopeActivity;
20+
import io.pslab.others.FloatSeekBar;
1721

1822
public class DataAnalysisFragment extends Fragment {
1923

2024
private Spinner spinnerCurveFit;
2125
private Spinner spinnerChannelSelect1;
2226
private Spinner spinnerChannelSelect2;
2327
private CheckBox checkBoxFouierTransform;
28+
private Spinner spinnerChannelSelectHorizontalOffset;
29+
private Spinner spinnerChannelSelectVerticalOffset;
30+
private FloatSeekBar seekBarHorizontalOffset;
31+
private FloatSeekBar seekBarVerticalOffset;
32+
private TextView textViewHorizontalOffset;
33+
private TextView textViewVerticalOffset;
2434

2535
public static DataAnalysisFragment newInstance() {
2636
return new DataAnalysisFragment();
@@ -29,13 +39,19 @@ public static DataAnalysisFragment newInstance() {
2939
@Override
3040
public View onCreateView(LayoutInflater inflater, ViewGroup container,
3141
Bundle savedInstanceState) {
32-
View v = inflater.inflate(R.layout.fragment_data_analysis, container, false);
42+
View v = inflater.inflate(R.layout.fragment_data_analysis_main, container, false);
3343
String[] curveFits = {"Sine Fit", "Square Fit"};
3444
String[] channels = {"None", "CH1", "CH2", "CH3", "MIC"};
3545

3646
spinnerCurveFit = v.findViewById(R.id.spinner_curve_fit_da);
3747
spinnerChannelSelect1 = v.findViewById(R.id.spinner_channel_select_da1);
3848
spinnerChannelSelect2 = v.findViewById(R.id.spinner_channel_select_da2);
49+
spinnerChannelSelectHorizontalOffset = v.findViewById(R.id.spinner_channel_select_horizontal_offset);
50+
spinnerChannelSelectVerticalOffset = v.findViewById(R.id.spinner_channel_select_vertical_offset);
51+
seekBarHorizontalOffset = v.findViewById(R.id.seekbar_horizontal_offset);
52+
seekBarVerticalOffset = v.findViewById(R.id.seekbar_vertical_offset);
53+
textViewHorizontalOffset = v.findViewById(R.id.textview_horizontal_offset);
54+
textViewVerticalOffset = v.findViewById(R.id.textview_vertical_offset);
3955
checkBoxFouierTransform = v.findViewById(R.id.checkBox_fourier_da);
4056
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
4157
ArrayAdapter<String> curveFitAdapter;
@@ -55,10 +71,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
5571
spinnerCurveFit.setAdapter(curveFitAdapter);
5672
spinnerChannelSelect1.setAdapter(adapter);
5773
spinnerChannelSelect2.setAdapter(adapter);
74+
spinnerChannelSelectHorizontalOffset.setAdapter(adapter);
75+
spinnerChannelSelectVerticalOffset.setAdapter(adapter);
5876

5977
spinnerCurveFit.setSelection(curveFitAdapter.getPosition("Sine Fit"), true);
6078
spinnerChannelSelect1.setSelection(adapter.getPosition("None"), true);
6179
spinnerChannelSelect2.setSelection(adapter.getPosition("None"), true);
80+
spinnerChannelSelectHorizontalOffset.setSelection(adapter.getPosition("None"), true);
81+
spinnerChannelSelectVerticalOffset.setSelection(adapter.getPosition("None"), true);
82+
6283
spinnerCurveFit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
6384
@Override
6485
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
@@ -101,6 +122,78 @@ public void onNothingSelected(AdapterView<?> parent) {
101122
}
102123
});
103124

125+
spinnerChannelSelectHorizontalOffset.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
126+
@Override
127+
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
128+
if (spinnerChannelSelectHorizontalOffset.getSelectedItem() != "None") {
129+
seekBarHorizontalOffset.setValue(((OscilloscopeActivity) getActivity()).xOffsets.get(spinnerChannelSelectHorizontalOffset.getSelectedItem().toString()));
130+
}
131+
}
132+
133+
@Override
134+
public void onNothingSelected(AdapterView<?> adapterView) {
135+
// Do nothing
136+
}
137+
});
138+
139+
spinnerChannelSelectVerticalOffset.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
140+
@Override
141+
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
142+
if (spinnerChannelSelectVerticalOffset.getSelectedItem() != "None") {
143+
seekBarVerticalOffset.setValue(((OscilloscopeActivity) getActivity()).yOffsets.get(spinnerChannelSelectVerticalOffset.getSelectedItem().toString()));
144+
}
145+
}
146+
147+
@Override
148+
public void onNothingSelected(AdapterView<?> adapterView) {
149+
// Do nothing
150+
}
151+
});
152+
153+
if (((OscilloscopeActivity) getActivity()).xAxisScale == 875) {
154+
seekBarHorizontalOffset.setters(0, ((OscilloscopeActivity) getActivity()).xAxisScale / 1000.0);
155+
} else {
156+
seekBarHorizontalOffset.setters(0, ((OscilloscopeActivity) getActivity()).xAxisScale);
157+
}
158+
seekBarHorizontalOffset.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
159+
@Override
160+
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
161+
textViewHorizontalOffset.setText(String.format("%sms", seekBarHorizontalOffset.getValue()));
162+
((OscilloscopeActivity) getActivity()).xOffsets.put(spinnerChannelSelectHorizontalOffset.getSelectedItem().toString(), seekBarHorizontalOffset.getValue());
163+
}
164+
165+
@Override
166+
public void onStartTrackingTouch(SeekBar seekBar) {
167+
// Do nothing
168+
}
169+
170+
@Override
171+
public void onStopTrackingTouch(SeekBar seekBar) {
172+
// Do nothing
173+
}
174+
});
175+
seekBarHorizontalOffset.setProgress(0);
176+
177+
seekBarVerticalOffset.setters(-1 * ((OscilloscopeActivity) getActivity()).yAxisScale, ((OscilloscopeActivity) getActivity()).yAxisScale);
178+
seekBarVerticalOffset.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
179+
@Override
180+
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
181+
textViewVerticalOffset.setText(String.format("%sV", seekBarVerticalOffset.getValue()));
182+
((OscilloscopeActivity) getActivity()).yOffsets.put(spinnerChannelSelectVerticalOffset.getSelectedItem().toString(), seekBarVerticalOffset.getValue());
183+
}
184+
185+
@Override
186+
public void onStartTrackingTouch(SeekBar seekBar) {
187+
// Do nothing
188+
}
189+
190+
@Override
191+
public void onStopTrackingTouch(SeekBar seekBar) {
192+
// Do nothing
193+
}
194+
});
195+
seekBarVerticalOffset.setProgress(50);
196+
104197
checkBoxFouierTransform.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
105198
@Override
106199
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

0 commit comments

Comments
 (0)