Skip to content

Commit 0d72a0d

Browse files
AsCressmarcnause
andauthored
feat: added text inputs for Position offsets (#2479)
Co-authored-by: Marc Nause <marc.nause@audioattack.de>
1 parent fa5f9c6 commit 0d72a0d

File tree

4 files changed

+136
-19
lines changed

4 files changed

+136
-19
lines changed

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

Lines changed: 95 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
package io.pslab.fragment;
22

33
import android.os.Bundle;
4-
5-
import androidx.fragment.app.Fragment;
6-
4+
import android.view.KeyEvent;
75
import android.view.LayoutInflater;
6+
import android.view.MotionEvent;
87
import android.view.View;
98
import android.view.ViewGroup;
9+
import android.view.inputmethod.EditorInfo;
1010
import android.widget.AdapterView;
1111
import android.widget.ArrayAdapter;
1212
import android.widget.CheckBox;
1313
import android.widget.CompoundButton;
14+
import android.widget.EditText;
1415
import android.widget.SeekBar;
1516
import android.widget.Spinner;
1617
import android.widget.TextView;
1718

19+
import androidx.fragment.app.Fragment;
20+
1821
import io.pslab.R;
1922
import io.pslab.activity.OscilloscopeActivity;
2023
import io.pslab.others.FloatSeekBar;
@@ -29,8 +32,9 @@ public class DataAnalysisFragment extends Fragment {
2932
private Spinner spinnerChannelSelectVerticalOffset;
3033
private FloatSeekBar seekBarHorizontalOffset;
3134
private FloatSeekBar seekBarVerticalOffset;
32-
private TextView textViewHorizontalOffset;
33-
private TextView textViewVerticalOffset;
35+
private EditText editTextHorizontalOffset;
36+
private EditText editTextVerticalOffset;
37+
boolean _ignore = false;
3438

3539
public static DataAnalysisFragment newInstance() {
3640
return new DataAnalysisFragment();
@@ -50,8 +54,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
5054
spinnerChannelSelectVerticalOffset = v.findViewById(R.id.spinner_channel_select_vertical_offset);
5155
seekBarHorizontalOffset = v.findViewById(R.id.seekbar_horizontal_offset);
5256
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);
57+
editTextHorizontalOffset = v.findViewById(R.id.edittext_horizontal_offset);
58+
editTextVerticalOffset = v.findViewById(R.id.edittext_vertical_offset);
5559
checkBoxFouierTransform = v.findViewById(R.id.checkBox_fourier_da);
5660
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
5761
ArrayAdapter<String> curveFitAdapter;
@@ -158,8 +162,10 @@ public void onNothingSelected(AdapterView<?> adapterView) {
158162
seekBarHorizontalOffset.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
159163
@Override
160164
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());
165+
if (!_ignore) {
166+
editTextHorizontalOffset.setText(String.format("%s", seekBarHorizontalOffset.getValue()));
167+
((OscilloscopeActivity) getActivity()).xOffsets.put(spinnerChannelSelectHorizontalOffset.getSelectedItem().toString(), seekBarHorizontalOffset.getValue());
168+
}
163169
}
164170

165171
@Override
@@ -172,14 +178,17 @@ public void onStopTrackingTouch(SeekBar seekBar) {
172178
// Do nothing
173179
}
174180
});
181+
seekBarHorizontalOffset.setProgress(100);
175182
seekBarHorizontalOffset.setProgress(0);
176183

177184
seekBarVerticalOffset.setters(-1 * ((OscilloscopeActivity) getActivity()).yAxisScale, ((OscilloscopeActivity) getActivity()).yAxisScale);
178185
seekBarVerticalOffset.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
179186
@Override
180187
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());
188+
if (!_ignore) {
189+
editTextVerticalOffset.setText(String.format("%s", seekBarVerticalOffset.getValue()));
190+
((OscilloscopeActivity) getActivity()).yOffsets.put(spinnerChannelSelectVerticalOffset.getSelectedItem().toString(), seekBarVerticalOffset.getValue());
191+
}
183192
}
184193

185194
@Override
@@ -194,13 +203,87 @@ public void onStopTrackingTouch(SeekBar seekBar) {
194203
});
195204
seekBarVerticalOffset.setProgress(50);
196205

206+
editTextHorizontalOffset.setOnTouchListener(new View.OnTouchListener() {
207+
@Override
208+
public boolean onTouch(View v, MotionEvent event) {
209+
editTextHorizontalOffset.setCursorVisible(true);
210+
return false;
211+
}
212+
});
213+
214+
editTextHorizontalOffset.setOnEditorActionListener(new EditText.OnEditorActionListener() {
215+
@Override
216+
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
217+
if (i == EditorInfo.IME_ACTION_DONE) {
218+
if (!editTextHorizontalOffset.getText().toString().isEmpty() && !editTextHorizontalOffset.getText().toString().equals("-") && !editTextHorizontalOffset.getText().toString().equals(".") && !editTextVerticalOffset.getText().toString().equals("-.")) {
219+
double xAxisScale = (((OscilloscopeActivity) getActivity()).xAxisScale == 875) ? ((OscilloscopeActivity) getActivity()).xAxisScale / 1000.0 : ((OscilloscopeActivity) getActivity()).xAxisScale;
220+
_ignore = true;
221+
if (Double.parseDouble(editTextHorizontalOffset.getText().toString()) > xAxisScale) {
222+
editTextHorizontalOffset.setText(String.format("%s", xAxisScale));
223+
seekBarHorizontalOffset.setValue(xAxisScale);
224+
((OscilloscopeActivity) getActivity()).xOffsets.put(spinnerChannelSelectHorizontalOffset.getSelectedItem().toString(), seekBarHorizontalOffset.getValue());
225+
_ignore = false;
226+
} else {
227+
seekBarHorizontalOffset.setValue(Double.parseDouble(editTextHorizontalOffset.getText().toString()));
228+
editTextHorizontalOffset.setText(String.format("%s", Double.parseDouble(editTextHorizontalOffset.getText().toString())));
229+
((OscilloscopeActivity) getActivity()).xOffsets.put(spinnerChannelSelectHorizontalOffset.getSelectedItem().toString(), seekBarHorizontalOffset.getValue());
230+
_ignore = false;
231+
}
232+
} else {
233+
seekBarHorizontalOffset.setProgress(0);
234+
}
235+
}
236+
editTextHorizontalOffset.setCursorVisible(false);
237+
return false;
238+
}
239+
});
240+
241+
editTextVerticalOffset.setOnTouchListener(new View.OnTouchListener() {
242+
@Override
243+
public boolean onTouch(View v, MotionEvent event) {
244+
editTextVerticalOffset.setCursorVisible(true);
245+
return false;
246+
}
247+
});
248+
249+
editTextVerticalOffset.setOnEditorActionListener(new EditText.OnEditorActionListener() {
250+
@Override
251+
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
252+
if (i == EditorInfo.IME_ACTION_DONE) {
253+
if (!editTextVerticalOffset.getText().toString().isEmpty() && !editTextVerticalOffset.getText().toString().equals("-") && !editTextVerticalOffset.getText().toString().equals(".") && !editTextVerticalOffset.getText().toString().equals("-.")) {
254+
_ignore = true;
255+
if (Double.parseDouble(editTextVerticalOffset.getText().toString()) > ((OscilloscopeActivity) getActivity()).yAxisScale) {
256+
editTextVerticalOffset.setText(String.format("%s", ((OscilloscopeActivity) getActivity()).yAxisScale));
257+
seekBarVerticalOffset.setValue(((OscilloscopeActivity) getActivity()).yAxisScale);
258+
((OscilloscopeActivity) getActivity()).yOffsets.put(spinnerChannelSelectVerticalOffset.getSelectedItem().toString(), seekBarVerticalOffset.getValue());
259+
_ignore = false;
260+
} else if (Double.parseDouble(editTextVerticalOffset.getText().toString()) < -((OscilloscopeActivity) getActivity()).yAxisScale) {
261+
editTextVerticalOffset.setText(String.format("%s", -((OscilloscopeActivity) getActivity()).yAxisScale));
262+
seekBarVerticalOffset.setValue(-((OscilloscopeActivity) getActivity()).yAxisScale);
263+
((OscilloscopeActivity) getActivity()).yOffsets.put(spinnerChannelSelectVerticalOffset.getSelectedItem().toString(), seekBarVerticalOffset.getValue());
264+
_ignore = false;
265+
} else {
266+
seekBarVerticalOffset.setValue(Double.parseDouble(editTextVerticalOffset.getText().toString()));
267+
editTextVerticalOffset.setText(String.format("%s", Double.parseDouble(editTextVerticalOffset.getText().toString())));
268+
((OscilloscopeActivity) getActivity()).yOffsets.put(spinnerChannelSelectVerticalOffset.getSelectedItem().toString(), seekBarVerticalOffset.getValue());
269+
_ignore = false;
270+
}
271+
} else {
272+
seekBarVerticalOffset.setProgress(50);
273+
}
274+
}
275+
editTextVerticalOffset.setCursorVisible(false);
276+
277+
return false;
278+
}
279+
});
280+
197281
checkBoxFouierTransform.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
198282
@Override
199283
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
200284
((OscilloscopeActivity) getActivity()).isFourierTransformSelected = isChecked;
201285
}
202286
});
203-
204287
return v;
205288
}
206289
}

app/src/main/res/layout/position_controls.xml

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
54
android:layout_width="match_parent"
65
android:layout_height="match_parent"
76
android:background="@drawable/rounded_custom_border">
@@ -33,13 +32,13 @@
3332
app:layout_constraintTop_toTopOf="parent" />
3433

3534
<TextView
36-
android:id="@+id/textview_vertical_offset"
37-
android:layout_width="0dp"
35+
android:id="@+id/textview_vertical_offset_unit"
36+
android:layout_width="wrap_content"
3837
android:layout_height="wrap_content"
3938
android:layout_marginEnd="@dimen/osc_cb_margin"
39+
android:text="@string/unit_volts"
4040
app:layout_constraintBottom_toBottomOf="@+id/spinner_channel_select_vertical_offset"
4141
app:layout_constraintEnd_toEndOf="parent"
42-
app:layout_constraintStart_toEndOf="@+id/seekbar_vertical_offset"
4342
app:layout_constraintTop_toTopOf="parent" />
4443

4544
<Spinner
@@ -51,13 +50,13 @@
5150
app:layout_constraintStart_toStartOf="parent" />
5251

5352
<TextView
54-
android:id="@+id/textview_horizontal_offset"
55-
android:layout_width="0dp"
53+
android:id="@+id/textview_horizontal_offset_unit"
54+
android:layout_width="wrap_content"
5655
android:layout_height="wrap_content"
5756
android:layout_marginEnd="@dimen/osc_cb_margin"
57+
android:text="@string/unit_milliseconds"
5858
app:layout_constraintBottom_toBottomOf="parent"
5959
app:layout_constraintEnd_toEndOf="parent"
60-
app:layout_constraintStart_toEndOf="@+id/seekbar_horizontal_offset"
6160
app:layout_constraintTop_toTopOf="@+id/spinner_channel_select_horizontal_offset" />
6261

6362
<androidx.constraintlayout.widget.Guideline
@@ -67,4 +66,36 @@
6766
android:orientation="vertical"
6867
app:layout_constraintGuide_percent="0.8" />
6968

69+
<EditText
70+
android:id="@+id/edittext_vertical_offset"
71+
android:layout_width="wrap_content"
72+
android:layout_height="wrap_content"
73+
android:background="@null"
74+
android:cursorVisible="false"
75+
android:imeOptions="actionDone"
76+
android:inputType="numberSigned|numberDecimal"
77+
android:minWidth="@dimen/edittext_min_width"
78+
android:maxEms="4"
79+
android:textAlignment="viewEnd"
80+
android:textAppearance="@android:style/TextAppearance.Material.Small"
81+
app:layout_constraintBottom_toBottomOf="@+id/spinner_channel_select_vertical_offset"
82+
app:layout_constraintEnd_toStartOf="@+id/textview_vertical_offset_unit"
83+
app:layout_constraintTop_toTopOf="parent" />
84+
85+
<EditText
86+
android:id="@+id/edittext_horizontal_offset"
87+
android:layout_width="wrap_content"
88+
android:layout_height="wrap_content"
89+
android:background="@null"
90+
android:cursorVisible="false"
91+
android:imeOptions="actionDone"
92+
android:inputType="numberDecimal"
93+
android:minWidth="@dimen/edittext_min_width"
94+
android:maxEms="4"
95+
android:textAlignment="viewEnd"
96+
android:textAppearance="@android:style/TextAppearance.Material.Small"
97+
app:layout_constraintBottom_toBottomOf="parent"
98+
app:layout_constraintEnd_toStartOf="@+id/textview_horizontal_offset_unit"
99+
app:layout_constraintTop_toTopOf="@+id/spinner_channel_select_horizontal_offset" />
100+
70101
</androidx.constraintlayout.widget.ConstraintLayout>

app/src/main/res/values/dimens.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,7 @@
408408
<dimen name="margin_5dp">5dp</dimen>
409409
<dimen name="text_size_8sp">8sp</dimen>
410410
<dimen name="sensor_image_height">90dp</dimen>
411+
<dimen name="edittext_min_width">1dp</dimen>
411412
<dimen name="text_size_9sp">9sp</dimen>
412413

413414
</resources>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,6 +1054,8 @@
10541054
<string name="github_developers_link">https://github.com/fossasia/pslab-android/graphs/contributors</string>
10551055
<string name="limit_dangerous">\"Dangerous\"</string>
10561056
<string name="limit_average">Average</string>
1057+
<string name="unit_milliseconds">\u0020ms</string>
1058+
<string name="unit_volts">\u0020V</string>
10571059
<string name="no_playback_data">No data to display</string>
10581060
<string name="privacy_policy">Privacy Policy</string>
10591061
<string name="auto_scale_error">No input found</string>

0 commit comments

Comments
 (0)