diff --git a/apk/GPSLogger-3.2.3.apk b/apk/GPSLogger-3.2.3.apk
new file mode 100644
index 00000000..47662650
Binary files /dev/null and b/apk/GPSLogger-3.2.3.apk differ
diff --git a/apk/GPSLogger-latest.apk b/apk/GPSLogger-latest.apk
index 344711f5..47662650 100644
Binary files a/apk/GPSLogger-latest.apk and b/apk/GPSLogger-latest.apk differ
diff --git a/app/build.gradle b/app/build.gradle
index 9e07498f..beb78e34 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -23,18 +23,17 @@ apply plugin: 'com.android.application'
android {
namespace 'eu.basicairdata.graziano.gpslogger'
- compileSdk 33
- buildToolsVersion '33.0.1'
+ compileSdk 34
defaultConfig {
applicationId "eu.basicairdata.graziano.gpslogger"
minSdkVersion 14
- targetSdkVersion 33
+ targetSdkVersion 34
// -----------------------------------------------------------------------------------------
// We use the Semantic Versioning (https://semver.org/):
- versionName '3.2.2'
- versionCode 51
+ versionName '3.2.3'
+ versionCode 52
// -----------------------------------------------------------------------------------------
vectorDrawables.useSupportLibrary = true
@@ -76,7 +75,7 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
- implementation 'androidx.preference:preference:1.2.0'
+ implementation 'androidx.preference:preference:1.2.1'
implementation 'com.google.android.material:material:1.7.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1'
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a9f4173a..9e79c1f1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
diff --git a/app/src/main/java/eu/basicairdata/graziano/gpslogger/FragmentRecordingControls.java b/app/src/main/java/eu/basicairdata/graziano/gpslogger/FragmentRecordingControls.java
index ec3e6d78..8891cb0f 100644
--- a/app/src/main/java/eu/basicairdata/graziano/gpslogger/FragmentRecordingControls.java
+++ b/app/src/main/java/eu/basicairdata/graziano/gpslogger/FragmentRecordingControls.java
@@ -33,7 +33,9 @@
import androidx.fragment.app.Fragment;
import android.os.Vibrator;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -90,6 +92,7 @@ public void onClick(View v) {
}
});
tvAnnotateButton = view.findViewById(R.id.id_annotate);
+ tvAnnotateButton.setHapticFeedbackEnabled(false);
tvAnnotateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -111,6 +114,7 @@ public boolean onLongClick(View v) {
}
});
tvRecordButton = view.findViewById(R.id.id_record);
+ tvRecordButton.setHapticFeedbackEnabled(false);
tvRecordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -118,6 +122,30 @@ public void onClick(View v) {
((GPSActivity) getActivity()).onToggleRecord();
}
});
+ tvRecordButton.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ if (isAdded()) {
+ //Log.w("myApp", "[#] FragmentRecordingControls.java - REQUEST TO ACTIVATE FORCED RECORDING OF TRACKPOINTS");
+ ((GPSActivity) getActivity()).onRequestForceRecord();
+ Update();
+ }
+ return true;
+ }
+ });
+ tvRecordButton.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
+ //Log.w("myApp", "[#] FragmentRecordingControls.java - (ACTION DOWN FOR FORCED RECORDING OF TRACKPOINTS)");
+ } else if (event.getAction() == android.view.MotionEvent.ACTION_UP || event.getAction() == android.view.MotionEvent.ACTION_CANCEL) {
+ Log.w("myApp", "[#] FragmentRecordingControls.java - DEACTIVATE FORCE RECORDING OF TRACKPOINTS");
+ gpsApp.setForcedTrackpointsRecording(false);
+ Update();
+ }
+ return false;
+ }
+ });
tvGeoPointsNumber = view.findViewById(R.id.id_textView_GeoPoints);
tvPlacemarksNumber = view.findViewById(R.id.id_textView_Placemarks);
return view;
@@ -234,7 +262,7 @@ private void setButtonToDisabledState(@NonNull TextView button, int imageId, int
public void Update() {
if (isAdded()) {
final Track track = gpsApp.getCurrentTrack();
- final boolean isRec = gpsApp.isRecording();
+ final boolean isRec = gpsApp.isRecording() || gpsApp.isForcedTrackpointsRecording();
final boolean isAnnot = gpsApp.isPlacemarkRequested();
final boolean isLck = gpsApp.isBottomBarLocked();
if (track != null) {
diff --git a/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSActivity.java b/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSActivity.java
index 1f749037..859912df 100644
--- a/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSActivity.java
+++ b/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSActivity.java
@@ -23,6 +23,8 @@
import android.Manifest;
import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -48,12 +50,15 @@
import androidx.preference.PreferenceManager;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
+
+import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
@@ -135,6 +140,7 @@ public void onTabSelected(TabLayout.Tab tab) {
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
bottomSheetBehavior.setHideable(false);
bottomSheet.setFocusable(false);
+ updateNavigationBarColor(getWindow(),getApplicationContext());
}
@Override
@@ -818,6 +824,25 @@ public void onRequestAnnotation() {
}
}
+ /**
+ * Process the request to to force recording the current trackpoint. It manages the button behaviour and
+ * the status of the request.
+ * It also displays some toasts to inform the user about some conditions.
+ */
+ public void onRequestForceRecord() {
+ if (!gpsApp.isBottomBarLocked()) {
+ //Log.w("myApp", "[#] GPSActivity.java - ACTIVATE FORCED RECORDING OF TRACKPOINTS");
+ gpsApp.setForcedTrackpointsRecording(true);
+ //Update();
+ } else {
+ //Log.w("myApp", "[#] GPSActivity.java - FORCED RECORDING OF TRACKPOINTS NOT POSSIBLE, BOTTOM BAR LOCKED");
+ if (toast != null) toast.cancel();
+ toast = Toast.makeText(gpsApp.getApplicationContext(), R.string.toast_bottom_bar_locked, Toast.LENGTH_SHORT);
+ toast.setGravity(Gravity.BOTTOM, 0, TOAST_VERTICAL_OFFSET);
+ toast.show();
+ }
+ }
+
/**
* Manages the Lock button behaviour.
*/
@@ -831,4 +856,21 @@ public void onToggleLock() {
}
//Update();
}
+
+ /**
+ * Updates the navigation bar background and icon colors to match the bottom bar background based on the theme.
+ */
+ public void updateNavigationBarColor(Window window, Context applicationContext) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ if (window != null && applicationContext instanceof Application) {
+ // Retrieve the preferred color theme from shared preferences and check if it's "1"
+ if (TextUtils.equals("1", PreferenceManager.getDefaultSharedPreferences(applicationContext).getString("prefColorTheme", "2"))) {
+ window.setNavigationBarColor(getResources().getColor(R.color.colorRecControlBackground,getTheme()));
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+ } else {
+ window.setNavigationBarColor(getResources().getColor(R.color.colorRecControlBackground,getTheme()));
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSApplication.java b/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSApplication.java
index ccaa8782..88bd21df 100644
--- a/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSApplication.java
+++ b/app/src/main/java/eu/basicairdata/graziano/gpslogger/GPSApplication.java
@@ -67,6 +67,7 @@
import androidx.documentfile.provider.DocumentFile;
import androidx.preference.PreferenceManager;
+import android.os.Vibrator;
import android.util.Log;
import org.greenrobot.eventbus.EventBus;
@@ -197,6 +198,7 @@ public class GPSApplication extends Application implements LocationListener {
private boolean isRecording; // True if the recording is active
private boolean isBottomBarLocked; // True if the bottom bar is locked
private boolean isGPSLocationUpdatesActive; // True if the Location Manager is active (is requesting FIXes)
+ private boolean isForcedTrackpointsRecording = false; // if True, the current fix is recorded into the track;
private int gpsStatus = GPS_SEARCHING; // The status of the GPS: GPS_DISABLED, GPS_OUTOFSERVICE,
// GPS_TEMPORARYUNAVAILABLE, GPS_SEARCHING, GPS_STABILIZING;
private LocationManager locationManager = null; // GPS LocationManager
@@ -453,13 +455,18 @@ public void onServiceDisconnected(ComponentName arg0) {
/**
* Starts and Binds to the Foreground Service GPSService
*/
- private void startAndBindGPSService() {
- gpsServiceIntent = new Intent(GPSApplication.this, GPSService.class);
- //Start the service
- startService(gpsServiceIntent);
- //Bind to the service
- bindService(gpsServiceIntent, gpsServiceConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT);
- Log.w("myApp", "[#] GPSApplication.java - StartAndBindGPSService");
+ public void startAndBindGPSService() {
+ if ((ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) &&
+ (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
+ gpsServiceIntent = new Intent(GPSApplication.this, GPSService.class);
+ //Start the service
+ startService(gpsServiceIntent);
+ //Bind to the service
+ bindService(gpsServiceIntent, gpsServiceConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT);
+ Log.w("myApp", "[#] GPSApplication.java - StartAndBindGPSService - SERVICE STARTED");
+ } else {
+ Log.w("myApp", "[#] GPSApplication.java - StartAndBindGPSService - UNABLE TO START THE SERVICE");
+ }
}
/**
@@ -690,6 +697,14 @@ public void setCurrentTrackVisible(boolean currentTrackVisible) {
isCurrentTrackVisible = currentTrackVisible;
}
+ public boolean isForcedTrackpointsRecording() {
+ return isForcedTrackpointsRecording;
+ }
+
+ public void setForcedTrackpointsRecording(boolean forcedTrackpointsRecording) {
+ isForcedTrackpointsRecording = forcedTrackpointsRecording;
+ }
+
public boolean isBackgroundActivityRestricted() {
return isBackgroundActivityRestricted;
}
@@ -1183,7 +1198,7 @@ public void onLocationChanged(@NonNull Location loc) {
// Distance Filter and Interval Filter in OR
// The Trackpoint is recorded when at less one filter is True.
- if ((isRecording) && ((prevRecordedFix == null)
+ if ((isRecording && ((prevRecordedFix == null)
|| (forceRecord) // Forced to record the point
|| ((prefGPSinterval == 0) && (prefGPSdistance == 0)) // No filters enabled --> it records all the points
|| ((prefGPSinterval > 0)
@@ -1196,7 +1211,14 @@ public void onLocationChanged(@NonNull Location loc) {
|| ((prefGPSinterval == 0)
&& (prefGPSdistance > 0) // Only distance filter enabled
&& ((loc.distanceTo(prevRecordedFix.getLocation()) >= prefGPSdistance)))
- || (currentTrack.getNumberOfLocations() == 0))){ // It is the first point of a track
+ || (currentTrack.getNumberOfLocations() == 0))) // It is the first point of a track
+ || (isForcedTrackpointsRecording)){ // recording button is long pressed
+
+ if (isForcedTrackpointsRecording) {
+ Vibrator vibrator;
+ vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
+ vibrator.vibrate(150);
+ }
prevRecordedFix = eloc;
ast.taskType = TASK_ADDLOCATION;
diff --git a/app/src/main/res/layout/activity_gps.xml b/app/src/main/res/layout/activity_gps.xml
index 444622f4..463ae67d 100644
--- a/app/src/main/res/layout/activity_gps.xml
+++ b/app/src/main/res/layout/activity_gps.xml
@@ -82,4 +82,11 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml
new file mode 100644
index 00000000..c6ccc536
--- /dev/null
+++ b/app/src/main/res/values-gl-rES/strings.xml
@@ -0,0 +1,215 @@
+
+
+
+
+ Pos. GPS
+ Trazado
+ Arquivo
+
+ Latitude
+ Lonxitude
+ Altitude
+ Velocidade
+ Dirección
+ Precisión
+ Tempo
+ Satélites
+ N
+ NNL
+ NL
+ LNL
+ L
+ LSL
+ SL
+ SSL
+ S
+ SSO
+ SO
+ OSO
+ O
+ ONO
+ NO
+ NNO
+
+ GPS non accesíbel
+ GPS desactivado
+ GPS fora de servizo
+ Buscando GPS
+ Estabilización do sinal
+ A aplicación non pode acceder á localización
+ A aplicación non pode funcionar en segundo plano.\nPrema aquí para ir aos axustes do sistema onde, na sección de batería, pode permitir a actividade en segundo plano.
+ O sensor GPS está desactivado.\nPrema aquí para ir aos axustes do sistema, onde pode activar o servizo de localización e estabelecer un método de localización que utilice o sensor GPS
+
+ Trazado
+ Duración
+ Vel. máxima
+ Vel. media
+ Distancia
+ Rumbo
+ Dif. altitude
+
+ Novo trazado
+ Comezar a gravar puntos de seguimento\nou engadir unha anotación\nutilizando un dos botóns de embaixo
+
+ Gravar
+ Pausar
+ Anotar
+ Deter
+ Bloquear
+ Desbloquear
+ Rematar o trazado
+ A barra inferior está bloqueada
+ Non hai nada que gardar
+ A gravación comezará cando se atope o sinal de GPS
+ A anotación tomarase cando se atope o sinal de GPS
+ Coordenadas copiadas no portapapeis
+ Aceptar
+ Anotacións
+ Puntos GPS
+
+ Axustes
+ Trazado arquivado
+ Trazados exportados ao cartafol \"%1$s\"
+ Sobre
+ Axuda en liña
+ Apagar
+
+ Engadir anotación
+ Introducir a descrición
+ Engadir
+
+ Arquivo baleiro
+ Lonxitude
+ Duración
+ Dif. alt.
+ Vel. max.
+ Vel. media
+ Puntos
+ Notacións
+
+ Exportar
+ Ver en…
+ Ver en %1$s
+ Eliminar
+ Compartir con…
+ Editar detalles
+
+ Confirma que quere eliminar os trazados seleccionados?
+ Si
+ Non
+ Cancelar
+ Non é posíbel escribir o ficheiro
+
+ Camiñadas
+ Auga e neve
+ Aéreo
+ Sobre rodas
+ Outros
+
+ A aplicación foi derramada durante a gravación en segundo plano.
+ Comprobe nos axustes de Android que a aplicación non estea optimizada para a batería e tampouco estea restrinxida no segundo plano.
+ Abrir os axustes
+
+ INTERFACE
+ Manter a pantalla acesa
+ A batería esgotase antes
+ Cor do tema
+ Escuro
+ Claro
+ Amosar coordenadas decimais
+ Parte fraccionaria en notación decimal
+ Amosar a hora do GPS no fuso horario local
+ no canto da hora global do GPS
+ Amosar o rumbo con
+ Graos leste respecto do norte
+ Puntos cardinais
+ Sistema de unidades
+ Métrico
+ Imperial
+ Aéreo / Náutico
+ Amosar as velocidades en
+ Cartafol de exportación local
+ Non definido
+ Visor de trazados
+ Non está instalado ningún visor GPX/KML
+ Preguntar sempre
+ SEGUIMENTO
+ Filtro de distancia
+ Filtro de intervalos
+ Desactivado
+ Intervalo de actualización de GPS
+ O máis curto dispoñíbel
+ 1 segundo (alta precisión)
+ 2 segundos
+ 3 segundos (baixa precisión)
+ CORRECCIÓNS DE ALTITUDE
+ Corrección por EGM96
+ Corrección automática da altitude, baseada no xeoide terrestre da NGA
+ Descargando ficheiro de 2028 kB:\nAltitude do xeoide EGM96…
+ Corrección manual
+ Desprazamento sen definir
+ EXPORTACIÓN
+ Exportar os trazados a TXT
+ Texto simple, valores separados por comas
+ Exportar os trazados a KML
+ Keyhole Markup Language (v.2.2)
+ Exportar os trazados a GPX
+ Estándar GPS eXchange Format
+ Versión do estándar GPX
+ GPX 1.0
+ GPX 1.1
+ Modo de altitude KML
+ Absoluta
+ Proxectado ao chan
+ Estatísticas de trazado baseadas en
+ Tempo total
+ Tempo en movemento
+
+ Produciuse un erro de descarga
+ Descarga completada
+ Produciuse un fallou na descarga. Ténteo de novo máis tarde
+ O trazado actual non está baleiro
+ Non hai ningún navegador de Internet instalado
+
+ ver.
+ Copyright © 2016–%1$s BasicAirData\nhttps://www.basicairdata.eu\n\nBasicAirData GPS Logger rexistra trazados empregando a posición GPS. Pode velos na súa aplicación preferida, compartilos e exportalos ao seu dispositivo en formato KML, GPX e TXT.\n\nÉ software libre, publicado baixo os térmos da Licenza Pública Xertal de GNU.\nPara obter máis detalles consulte: https://www.gnu.org/licenses/gpl.txt
+ Se lle gusta usar esta aplicación, agradecémoslle que se tome un intre para valorar GPS Logger na Google Play Store.
+ Pechar
+ Avalía esta aplicación
+ Non é posíbel acceder á tenda
+
+ está activo
+
+ Está a pechar a aplicación.\nQuere rematar agora o trazado?
+
+ m
+ km
+ m/s
+ km/h
+ ft
+ mi
+ fps
+ mph
+ NM
+ kn
+ s
+
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 6854403a..081219b2 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -65,7 +65,7 @@
Vel. média
Distância
Orientação
- Altitude Gap
+ Dif. de altitude
Nova gravação de percurso
Começar a gravação de Pontos\nou adicionar uma Anotação\nusando um dos botões abaixo
diff --git a/build.gradle b/build.gradle
index 9aac19bb..d1ee03fd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
gradlePluginPortal()
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.1.2'
+ classpath 'com.android.tools.build:gradle:8.7.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/fastlane/metadata/android/en-US/changelogs/52.txt b/fastlane/metadata/android/en-US/changelogs/52.txt
new file mode 100644
index 00000000..add7d97a
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/52.txt
@@ -0,0 +1,5 @@
+- Force recording the current trackpoint by holding down the Record button
+- Added galician language
+- Updated portuguese translation
+- Upgraded to API 34 and updated dependencies
+- Some UI refinements
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index ccebba77..2c352119 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index c9b0f7a0..68e8816d 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,7 +1,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionSha256Sum=4159b938ec734a8388ce03f52aa8f3c7ed0d31f5438622545de4f83a89b79788
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 79a61d42..f5feea6d 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -83,10 +85,9 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,10 +134,13 @@ location of your Java installation."
fi
else
JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
@@ -144,7 +148,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -197,11 +201,15 @@ if "$cygwin" || "$msys" ; then
done
fi
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
diff --git a/gradlew.bat b/gradlew.bat
index 6689b85b..9b42019c 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
diff --git a/sourcecode/GPSLogger-3.2.3 - Source.zip b/sourcecode/GPSLogger-3.2.3 - Source.zip
new file mode 100644
index 00000000..247f70c5
Binary files /dev/null and b/sourcecode/GPSLogger-3.2.3 - Source.zip differ