diff --git a/.github/linters/.codespellrc b/.github/linters/.codespellrc new file mode 100644 index 0000000..7f85718 --- /dev/null +++ b/.github/linters/.codespellrc @@ -0,0 +1,3 @@ +[codespell] +# Android attribute names that look like typos +ignore-words-list = showin diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml index 8c94241..a36baff 100644 --- a/.github/workflows/super-linter.yml +++ b/.github/workflows/super-linter.yml @@ -39,4 +39,6 @@ jobs: VALIDATE_JSCPD: false # the Java code follows Android Studio style, not Google Java style VALIDATE_GOOGLE_JAVA_FORMAT: false + # checkstyle enforces Sun style (80 char lines, javadoc on every field), which this code does not follow + VALIDATE_JAVA: false GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/app/src/main/java/in/co/gorest/grblcontroller/listeners/FileSenderListener.java b/app/src/main/java/in/co/gorest/grblcontroller/listeners/FileSenderListener.java index eb75846..b631c93 100644 --- a/app/src/main/java/in/co/gorest/grblcontroller/listeners/FileSenderListener.java +++ b/app/src/main/java/in/co/gorest/grblcontroller/listeners/FileSenderListener.java @@ -28,8 +28,8 @@ import java.io.File; import in.co.gorest.grblcontroller.BR; -import in.co.gorest.grblcontroller.model.Constants; -import in.co.gorest.grblcontroller.util.GrblUtils; +import in.co.gorest.grblcontroller.GrblController; +import in.co.gorest.grblcontroller.R; public class FileSenderListener extends BaseObservable { @@ -60,7 +60,7 @@ public static void resetClass(){ private FileSenderListener(){ this.setStatus(STATUS_IDLE); - this.gcodeFileName = " " + GrblUtils.implode(" | ", Constants.SUPPORTED_FILE_TYPES); + this.gcodeFileName = GrblController.getInstance().getString(R.string.text_select_gcode_file); this.gcodeFile = null; this.rowsInFile = 0; this.rowsSent = 0; diff --git a/app/src/main/java/in/co/gorest/grblcontroller/model/Constants.java b/app/src/main/java/in/co/gorest/grblcontroller/model/Constants.java index c8e2e64..bed3a4d 100644 --- a/app/src/main/java/in/co/gorest/grblcontroller/model/Constants.java +++ b/app/src/main/java/in/co/gorest/grblcontroller/model/Constants.java @@ -62,8 +62,9 @@ public interface Constants { String MACHINE_STATUS_HOME = "Home"; String MACHINE_STATUS_NOT_CONNECTED = "Unknown"; - String[] SUPPORTED_FILE_TYPES = {".tap",".gcode", ".nc", ".ngc", ".fnc", ".txt"}; - String SUPPORTED_FILE_TYPES_STRING = "^.*\\.(tap|gcode|nc|ngc|cnc|txt|ncc|fnc|dnc|fan|gc|txt|ncg|ncp|fgc)$"; + // G-code file extensions the file tab accepts. The check regex is built from this list. + String[] SUPPORTED_FILE_EXTENSIONS = {"tap", "gcode", "nc", "ngc", "cnc", "ncc", "fnc", "dnc", "fan", "gc", "ncg", "ncp", "fgc", "txt"}; + String SUPPORTED_FILE_TYPES_STRING = "^.*\\.(" + String.join("|", SUPPORTED_FILE_EXTENSIONS) + ")$"; String JUST_STOP_STREAMING = "0"; String STOP_STREAMING_AND_RESET = "1"; diff --git a/app/src/main/java/in/co/gorest/grblcontroller/ui/FileSenderTabFragment.java b/app/src/main/java/in/co/gorest/grblcontroller/ui/FileSenderTabFragment.java index 5519249..92621b3 100644 --- a/app/src/main/java/in/co/gorest/grblcontroller/ui/FileSenderTabFragment.java +++ b/app/src/main/java/in/co/gorest/grblcontroller/ui/FileSenderTabFragment.java @@ -237,7 +237,13 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == Constants.FILE_PICKER_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null){ Uri uri = data.getData(); if(uri != null){ - File gcodeFile = copyPickedFileToCache(uri); + String displayName = getDisplayName(uri); + if(!displayName.toLowerCase().matches(Constants.SUPPORTED_FILE_TYPES_STRING)){ + String allowed = "." + String.join(", .", Constants.SUPPORTED_FILE_EXTENSIONS); + EventBus.getDefault().post(new UiToastEvent(getString(R.string.text_unsupported_file_type, allowed), true, true)); + return; + } + File gcodeFile = copyPickedFileToCache(uri, displayName); if(gcodeFile != null){ fileSender.setGcodeFile(gcodeFile); fileSender.setElapsedTime("00:00:00"); @@ -262,13 +268,7 @@ private String getDisplayName(Uri uri){ return name != null ? name : "gcode_file"; } - private File copyPickedFileToCache(Uri uri){ - String displayName = getDisplayName(uri); - if(!displayName.toLowerCase().matches(Constants.SUPPORTED_FILE_TYPES_STRING)){ - EventBus.getDefault().post(new UiToastEvent(GrblUtils.implode(" | ", Constants.SUPPORTED_FILE_TYPES), true, true)); - return null; - } - + private File copyPickedFileToCache(Uri uri, String displayName){ File destination = new File(requireContext().getCacheDir(), displayName); try(InputStream in = requireContext().getContentResolver().openInputStream(uri); OutputStream out = new FileOutputStream(destination)){ if(in == null) return null; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index dfa0ca4..9abc24e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -60,7 +60,7 @@ android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:padding="@dimen/card_padding" - android:stretchColumns="0,1,2"> + android:stretchColumns="1,2"> @@ -90,7 +90,7 @@ android:gravity="center_vertical" android:paddingTop="@dimen/status_row_padding" android:paddingBottom="@dimen/status_row_padding" - android:text="X" + android:text="X Axis" android:textColor="@{machineStatus.enabledPins.x ? @color/colorPrimary : @color/colorTextSecondary}" tools:ignore="HardcodedText" /> @@ -105,7 +105,7 @@ android:textAppearance="@style/TextAppearance.Grbl.Coordinate" android:paddingTop="@dimen/status_row_padding" android:paddingBottom="@dimen/status_row_padding" - android:textColor="@color/colorTextSecondary" + android:textColor="@color/colorAccent" android:gravity="end" android:id="@+id/wpos_edit_x" android:tag="X" android:text='@{String.format("%.3f", machineStatus.workPosition.cordX)}' /> @@ -118,7 +118,7 @@ android:gravity="center_vertical" android:paddingTop="@dimen/status_row_padding" android:paddingBottom="@dimen/status_row_padding" - android:text="Y" + android:text="Y Axis" android:textColor="@{machineStatus.enabledPins.y ? @color/colorPrimary : @color/colorTextSecondary}" tools:ignore="HardcodedText" /> @@ -133,7 +133,7 @@ android:textAppearance="@style/TextAppearance.Grbl.Coordinate" android:paddingTop="@dimen/status_row_padding" android:paddingBottom="@dimen/status_row_padding" - android:textColor="@color/colorTextSecondary" + android:textColor="@color/colorAccent" android:gravity="end" android:id="@+id/wpos_edit_y" android:tag="Y" android:text='@{String.format("%.3f", machineStatus.workPosition.cordY)}' /> @@ -146,7 +146,7 @@ android:gravity="center_vertical" android:paddingTop="@dimen/status_row_padding" android:paddingBottom="@dimen/status_row_padding" - android:text="Z" + android:text="Z Axis" android:textColor="@{machineStatus.enabledPins.z ? @color/colorPrimary : @color/colorTextSecondary}" tools:ignore="HardcodedText" /> @@ -163,7 +163,7 @@ android:paddingBottom="@dimen/status_row_padding" android:gravity="end" android:id="@+id/wpos_edit_z" android:tag="Z" android:text='@{String.format("%.3f", machineStatus.workPosition.cordZ)}' - android:textColor="@{(machineStatus.toolLengthOffset != 0) ? @color/colorPrimary : @color/colorTextSecondary}" /> + android:textColor="@{(machineStatus.toolLengthOffset != 0) ? @color/colorPrimary : @color/colorAccent}" /> @@ -181,18 +181,14 @@ - - + android:text='@{machineStatus.parserState.coordinateSystem + " " + machineStatus.parserState.unitSelection + " " + machineStatus.parserState.distanceMode + " F" + machineStatus.feedRate.toString()}' /> + android:text='@{machineStatus.plannerBuffer.toString() + " | " + machineStatus.serialRxBuffer.toString()}' /> diff --git a/app/src/main/res/layout/fragment_probing_tab.xml b/app/src/main/res/layout/fragment_probing_tab.xml index 5c51048..af36bb9 100644 --- a/app/src/main/res/layout/fragment_probing_tab.xml +++ b/app/src/main/res/layout/fragment_probing_tab.xml @@ -217,7 +217,7 @@ android:id="@+id/last_probe_position" android:fontFamily="monospace" android:textSize="16sp" - android:textColor="@color/colorAccent" + android:textColor="@color/colorTextPrimary" android:layout_alignParentEnd="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> @@ -250,7 +250,7 @@ android:id="@+id/current_tlo" android:fontFamily="monospace" android:textSize="16sp" - android:textColor="@color/colorAccent" + android:textColor="@color/colorTextPrimary" android:layout_alignParentEnd="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 6541b8f..f2f7cd6 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -207,7 +207,7 @@ - 1. Do probing with first tool. 2. Change the tool. 3. Probe again with \"Probe + TLO\". + Probe: a ferramenta desce até tocar a placa. O zero de Z fica no topo da placa.\nProbe + TLO: depois de trocar a ferramenta, sonde de novo. A diferença de comprimento vira o offset da ferramenta (G43.1).\nTLO ✕: limpa o offset da ferramenta (G49).\n\nPassos\n1. Coloque a placa sob a ferramenta e conecte o fio da sonda.\n2. Defina o avanço, a espessura da placa e a distância de sondagem.\n3. Toque em Probe com a primeira ferramenta.\n4. Troque a ferramenta e toque em Probe + TLO. Feed rate Plate thickness Distance to probe @@ -226,7 +226,7 @@ Probe success with auto adjust Probe success Probe success. Tool length offset applied - Probing | Tool length offset {fa-info-circle 16dp @color/colorAccent} + Probing {fa-info-circle 16dp @color/colorAccent} Last probe position Current TLO Probe {fa-plus 14dp} TLO @@ -283,6 +283,8 @@ Time elapsed Progresso File not found! + Selecionar arquivo G-code + Tipo de arquivo não suportado. Permitidos: %1$s Overrides F:S:V Overrides F:S Check {fa-toggle-on 16dp @color/colorAccent} diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7fefad5..d034d1f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -93,6 +93,8 @@ добавляет четыре пользовательские кнопки на панель ручного управления. Проверка файла начата Файл не найден! + Выберите файл G-code + Неподдерживаемый тип файла. Разрешены: %1$s Идёт чтение файла Трансляция файла начата СОЖ {fa-toggle-off 16dp} @@ -157,8 +159,8 @@ Успех зонда. Длина инструмента смещение применяется Расстояние зондирования Скорость подачи - 1. У зондирования с первым инструментом. 2. Изменение инструмента. 3. Зонд снова с \"зонд + TLO \". - Зондирование | Смещение длины инструмента {fa-info-circle 16dp @color/colorAccent} + Probe: инструмент опускается, пока не коснётся пластины. Ноль Z ставится на верх пластины.\nProbe + TLO: после смены инструмента зондируйте снова. Разница длины задаётся как смещение инструмента (G43.1).\nTLO ✕: сбрасывает смещение инструмента (G49).\n\nШаги\n1. Положите пластину под инструмент и подключите провод зонда.\n2. Задайте подачу, толщину пластины и расстояние зондирования.\n3. Нажмите Probe с первым инструментом.\n4. Смените инструмент и нажмите Probe + TLO. + Зондирование {fa-info-circle 16dp @color/colorAccent} Кнопки быстрого шагового перемещения настройте кнопки быстрого шагового перемещения Сброс diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 07d1fa5..147a827 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -265,7 +265,7 @@ - 1. Do probing with first tool. 2. Change the tool. 3. Probe again with \"Probe + TLO\". + Probe: the tool moves down until it touches the plate. Z zero is set to the plate top.\nProbe + TLO: after a tool change, probe again. The length difference is applied as the tool offset (G43.1).\nTLO ✕: clears the tool offset (G49).\n\nSteps\n1. Put the touch plate under the tool and connect the probe wire.\n2. Set feed rate, plate thickness and distance to probe.\n3. Tap Probe with the first tool.\n4. Change the tool, then tap Probe + TLO. Feed rate Plate thickness Distance to probe @@ -284,7 +284,7 @@ Probe success with auto adjust Probe success Probe success. Tool length offset applied - Probing | Tool length offset {fa-info-circle 16dp @color/colorAccent} + Probing {fa-info-circle 16dp @color/colorAccent} Last probe position Current TLO Probe {fa-plus 14dp} TLO @@ -341,6 +341,8 @@ Time elapsed Progress File not found! + Select G-code file + Unsupported file type. Allowed: %1$s Overrides F:S:V Overrides F:S Check {fa-toggle-on 16dp @color/colorAccent}