diff --git a/README.md b/README.md
index 0d8889ba..ee024a10 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,15 @@
-# WheelLogAndroid
+# WheelLogAndroid V2.0.9
-One more try to make it working with Inmotion V8
+Updated Gradle configuration to compile with Gradle 4.4
-Added support for Samsung Gear Tizen based watches
+Inmotion V10 support
+
+Manual BLE MAC address edit
+
+When the app is in focus, pressing the volume up or down keys will trigger the native wheel beep (KingSong and Gotway)
+
+Pressing the Select button on a connected Pebble watch will trigger the native wheel beep (KingSong and Gotway), if enabled in preferences
+This feature might work with a Tizen watch as well, please provide feedback as I don't have access to one
Pebble app code
diff --git a/app/build.gradle b/app/build.gradle
index 046a25e0..bb374739 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,18 +2,17 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 25
- buildToolsVersion '27.0.3'
lintOptions {
abortOnError false
}
-
defaultConfig {
applicationId "com.cooper.wheellog"
- minSdkVersion 18
- targetSdkVersion 25
+ vectorDrawables.useSupportLibrary = true
+ minSdkVersion 24
+ targetSdkVersion 24
versionCode 34
- versionName "2.0.8"
+ versionName '2.0.10'
}
buildTypes {
release {
@@ -21,20 +20,30 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ productFlavors {
+ }
}
//apply plugin: 'android-apt'
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:design:25.1.0'
- implementation 'com.android.support:gridlayout-v7:25.1.0'
- implementation 'com.google.android.gms:play-services-drive:10.0.1'
+ // implementation 'com.android.support:appcompat-v7:24.2.1'
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation 'com.android.support:animated-vector-drawable:24.2.1'
+ implementation 'com.android.support:support-compat:24.2.1'
+ implementation 'com.android.support:design:24.2.1'
+ implementation 'com.android.support:preference-v7:24.2.1'
+ implementation 'com.android.support:gridlayout-v7:24.2.1'
+ //implementation 'com.google.android.gms:play-services-base:15.0.1'
+ //implementation 'com.google.android.gms:play-services-identity:15.0.1'
+ //implementation 'com.google.android.gms:play-services-auth:16.0.0'
+ implementation 'com.google.android.gms:play-services-drive:10.2.0'
implementation 'com.getpebble:pebblekit:3.1.0'
implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
implementation 'com.jakewharton.timber:timber:4.3.1'
- implementation 'com.pavelsikun:material-seekbar-preference:2.3.0+'
+ implementation 'com.pavelsikun:material-seekbar-preference:2.3.0'
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.0'
implementation "com.github.hotchemi:permissionsdispatcher:2.2.0"
annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:2.2.0"
+
}
diff --git a/app/src/main/java/com/cooper/wheellog/BluetoothLeService.java b/app/src/main/java/com/cooper/wheellog/BluetoothLeService.java
index 9e84078e..d7e1c101 100644
--- a/app/src/main/java/com/cooper/wheellog/BluetoothLeService.java
+++ b/app/src/main/java/com/cooper/wheellog/BluetoothLeService.java
@@ -100,6 +100,10 @@ public void onReceive(Context context, Intent intent) {
}
break;
case Constants.ACTION_REQUEST_KINGSONG_HORN:
+ WheelData.getInstance().makeWheelBeep();
+ /* this is type-specific wheel beep code that has been moved to WheelData::makeWheelBeep().
+ type-specific code has been implemented there.
+
if (WheelData.getInstance().getWheelType() == WHEEL_TYPE.KINGSONG) {
byte[] data = new byte[20];
data[0] = (byte) -86;
@@ -110,6 +114,7 @@ public void onReceive(Context context, Intent intent) {
data[19] = (byte) 90;
writeBluetoothGattCharacteristic(data);
}
+ */
break;
case Constants.ACTION_REQUEST_CONNECTION_TOGGLE:
if (mConnectionState == STATE_DISCONNECTED)
diff --git a/app/src/main/java/com/cooper/wheellog/MainActivity.java b/app/src/main/java/com/cooper/wheellog/MainActivity.java
index 037e8d4e..cd58d53f 100644
--- a/app/src/main/java/com/cooper/wheellog/MainActivity.java
+++ b/app/src/main/java/com/cooper/wheellog/MainActivity.java
@@ -3,6 +3,8 @@
import android.Manifest;
import android.app.Fragment;
import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattService;
import android.bluetooth.BluetoothManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -59,12 +61,14 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Locale;
+import java.util.UUID;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.RuntimePermissions;
import timber.log.Timber;
+import static com.cooper.wheellog.utils.Constants.ACTION_REQUEST_KINGSONG_HORN;
import static com.cooper.wheellog.utils.MathsUtil.kmToMiles;
@@ -880,10 +884,26 @@ public void run() {
}
return true;
default:
- return super.onKeyDown(keyCode, event);
+ return super.onKeyDown(keyCode, event); // should this not be super.OnKeyUp() instead? *MacPara 20180504
}
}
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) ||
+ (keyCode == KeyEvent.KEYCODE_VOLUME_UP))
+ {
+ // Add code to sound the alarm here...
+ WheelData.getInstance().makeWheelBeep();
+ return true;
+ }
+ else
+ return super.onKeyDown(keyCode, event);
+
+ }
+
+
ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
@@ -899,13 +919,18 @@ private void loadPreferences() {
int max_speed = sharedPreferences.getInt(getString(R.string.max_speed), 30) * 10;
wheelView.setMaxSpeed(max_speed);
wheelView.setUseMPH(use_mph);
+ WheelData.getInstance().setUseRatio(sharedPreferences.getBoolean(getString(R.string.use_ratio), false));
+ WheelData.getInstance().setGotway84V(sharedPreferences.getBoolean(getString(R.string.gotway_84v), false));
+
wheelView.invalidate();
boolean alarms_enabled = sharedPreferences.getBoolean(getString(R.string.alarms_enabled), false);
+
boolean use_ratio = sharedPreferences.getBoolean(getString(R.string.use_ratio), false);
WheelData.getInstance().setUseRatio(use_ratio);
boolean gotway_84v = sharedPreferences.getBoolean(getString(R.string.gotway_84v), false);
WheelData.getInstance().setGotway84V(gotway_84v);
+
WheelData.getInstance().setAlarmsEnabled(alarms_enabled);
if (alarms_enabled) {
diff --git a/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java b/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java
index b29caa75..d144e987 100644
--- a/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java
+++ b/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java
@@ -3,6 +3,8 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
@@ -19,8 +21,6 @@
import com.cooper.wheellog.utils.SettingsUtil;
import com.pavelsikun.seekbarpreference.SeekBarPreference;
-import timber.log.Timber;
-
public class PreferencesFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
enum SettingsScreen {
@@ -42,8 +42,26 @@ enum SettingsScreen {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
+ updateVersionTag();
+
+ }
+
+ private void updateVersionTag()
+ {
+ Preference pref = getPreferenceScreen().findPreference(getString(R.string.VersionTag));
+ if (pref == null) return;
+
+ try {
+ PackageInfo pInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0);
+ String version = "pInfo";
+ if (pInfo != null) version = "V" + pInfo.versionName;
+ pref.setTitle(version);
+ }
+ catch (Exception e)
+ { ; }
}
@Override
@@ -113,10 +131,37 @@ public void onClick(DialogInterface dialog, int which) {
boolean handle_button_disabled = sharedPreferences.getBoolean(getString(R.string.handle_button_disabled), false);
WheelData.getInstance().updateHandleButton(handle_button_disabled);
break;
+ case "ks_speed_alarm_1":
+ case "ks_speed_alarm_2":
+ case "ks_speed_alarm_3":
case "wheel_max_speed":
+ final int max_speed = sharedPreferences.getInt(getString(R.string.wheel_max_speed), 0);
+ final int spd_alarm_1 = sharedPreferences.getInt("ks_speed_alarm)1", 0);
+ final int spd_alarm_2 = sharedPreferences.getInt("ks_speed_alarm)2", 0);
+ final int spd_alarm_3 = sharedPreferences.getInt("ks_speed_alarm)3", 0);
+ new AlertDialog.Builder(getActivity())
+ .setTitle("Wheel Speed Alarm Change")
+ .setMessage("Do you want to write these alarms to your Kingsong wheel?\n 1/ 2/ 3/ tiltback\n"+
+ String.format("%2d/%2d/%2d/%2d km/h", spd_alarm_1, spd_alarm_2, spd_alarm_3, max_speed))
+ .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ WheelData.getInstance().updateMaxSpeed(max_speed, spd_alarm_1, spd_alarm_2, spd_alarm_3);
+ }
+ })
+ .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // no action needed as changes to alarms should accumulative but we might need to add wanring message and reset of tiltback if answer is negative
+ //mSpeedWarningDisplayed = true;
+ //correctWheelBarState(getString(R.string.wheel_max_speed), WheelData.getInstance().getWheelMaxSpeed());
+
+ }
+ })
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .show();
+
//if (!mSpeedWarningDisplayed) {
- final int max_speed = sharedPreferences.getInt(getString(R.string.wheel_max_speed), 0);
- WheelData.getInstance().updateMaxSpeed(max_speed);
+ //final int max_speed = sharedPreferences.getInt(getString(R.string.wheel_max_speed), 0);
+ //WheelData.getInstance().updateMaxSpeed(max_speed);
// if (max_speed > 30) {
// new AlertDialog.Builder(getActivity())
// .setTitle("Are you sure?")
@@ -174,6 +219,14 @@ public void onClick(DialogInterface dialog, int which) {
int led_mode = Integer.parseInt(sharedPreferences.getString(getString(R.string.led_mode), "0"));
WheelData.getInstance().updateLedMode(led_mode);
break;
+ case "use_ratio":
+ boolean use_ratio = sharedPreferences.getBoolean(getString(R.string.use_ratio), false);
+ WheelData.getInstance().setUseRatio(use_ratio);
+ break;
+ case "gotway_84v":
+ boolean g84v_enabled = sharedPreferences.getBoolean(getString(R.string.gotway_84v), false);
+ WheelData.getInstance().setGotway84V(g84v_enabled);
+ break;
// case "reset_user_trip":
// WheelData.getInstance().resetUserDistance();
// break;
@@ -356,7 +409,6 @@ public void onClick(DialogInterface dialog, int which) {
builder1.show();
-
//SettingsUtil.setPasswordForWheel(getActivity(), deviceAddress, "000000");
//finish();
}
@@ -373,7 +425,6 @@ public void onClick(DialogInterface dialog, int which) {
return true;
}
-
});
}
@@ -505,6 +556,7 @@ public boolean show_main_menu() {
getPreferenceScreen().removeAll();
addPreferencesFromResource(R.xml.preferences);
+ updateVersionTag();
//System.out.println("ShowMainMenuRecognized");
Preference wheel_button = findPreference(getString(R.string.wheel_settings));
mWheelType = WheelData.getInstance().getWheelType();
diff --git a/app/src/main/java/com/cooper/wheellog/WheelData.java b/app/src/main/java/com/cooper/wheellog/WheelData.java
index 4629e4d4..bddbc24c 100644
--- a/app/src/main/java/com/cooper/wheellog/WheelData.java
+++ b/app/src/main/java/com/cooper/wheellog/WheelData.java
@@ -78,7 +78,10 @@ public class WheelData {
private boolean mWheelLedEnabled = false;
private boolean mWheelButtonDisabled = false;
private int mWheelMaxSpeed = 25;
- private int mWheelSpeakerVolume = 50;
+ private int nWheelSpeedAlarm1 = 0;
+ private int nWheelSpeedAlarm2 = 0;
+ private int nWheelSpeedAlarm3 = 0;
+ private int mWheelSpeakerVolume = 50;
private int mWheelTiltHorizon = 0;
private boolean mAlarmsEnabled = false;
@@ -310,7 +313,11 @@ public void updateHandleButton(boolean enabledButton) {
}
}
- public void updateMaxSpeed(int wheelMaxSpeed) {
+ public void updateMaxSpeed(int wheelMaxSpeed) {
+ this.updateMaxSpeed(wheelMaxSpeed, 0, 0, wheelMaxSpeed - 1);
+ }
+
+ public void updateMaxSpeed(int wheelMaxSpeed, int spd_alarm_1, int spd_alarm_2, int spd_alarm_3) {
if (mWheelType == WHEEL_TYPE.INMOTION) {
if (mWheelMaxSpeed != wheelMaxSpeed) {
mWheelMaxSpeed = wheelMaxSpeed;
@@ -345,8 +352,17 @@ public void updateMaxSpeed(int wheelMaxSpeed) {
byte[] data = new byte[20];
data[0] = (byte) 0xAA;
data[1] = (byte) 0x55;
- data[6] = (byte) 0x1F;
- data[8] = (byte) wheelMaxSpeed;
+ data[2] = (byte)spd_alarm_1;
+ data[3] = 0;
+
+ data[4] = (byte)spd_alarm_2;
+ data[5] = 0;
+ data[6] = (byte)spd_alarm_3;
+ data[7] = 0;
+ data[8] = (byte)wheelMaxSpeed;
+ data[9] = 0;
+ //data[6] = (byte) 0x1F; // hardcoded to 31 km/h, yuck!
+ //data[8] = (byte) wheelMaxSpeed;
data[16] = (byte) 0x85;
data[17] = (byte) 0x14;
data[18] = (byte) 0x5A;
@@ -675,6 +691,29 @@ else if (mAlarm3Speed > 0 && mAlarm3Battery > 0 &&
}
+ public void makeWheelBeep()
+ {
+ switch (mWheelType)
+ {
+ case GOTWAY:
+ mBluetoothLeService.writeBluetoothGattCharacteristic("b".getBytes());
+ break;
+ case INMOTION: break;
+ case KINGSONG:
+ byte[] data = new byte[20];
+ data[0] = (byte) 0xaa;
+ data[1] = (byte)0x55;
+ data[16] = (byte) 0x88;
+ data[17] = 0x14;
+ data[18] = 0x5a;
+ data[19] = 0x5a;
+ mBluetoothLeService.writeBluetoothGattCharacteristic(data);
+ break;
+ case NINEBOT: break;
+ default:
+ }
+ }
+
private void raiseAlarm(ALARM_TYPE alarmType, Context mContext) {
Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {0};
@@ -762,10 +801,10 @@ private boolean decodeKingSong(byte[] data) {
if (data.length >= 20) {
int a1 = data[0] & 255;
int a2 = data[1] & 255;
- if (a1 != 170 || a2 != 85) {
+ if (a1 != 170 || a2 != 85) { // needs to be 0xAA and 0x55 !
return false;
}
- if ((data[16] & 255) == 169) { // Live data
+ if ((data[16] & 255) == 169) { // Live data 0xA9
mVoltage = byteArrayInt2(data[2], data[3]);
mSpeed = byteArrayInt2(data[4], data[5]);
mTotalDistance = byteArrayInt4(data[6], data[7], data[8], data[9]);
@@ -778,18 +817,22 @@ private boolean decodeKingSong(byte[] data) {
mModeStr = String.format(Locale.US, "%d", mMode);
}
+ int iVoltage = mVoltage;
+ if (mGotway84V) {
+ iVoltage = (int)Math.round(mVoltage * 0.8);
+ }
int battery;
- if (mVoltage < 5000) {
+ if (iVoltage < 5000) {
battery = 0;
- } else if (mVoltage >= 6600) {
+ } else if (iVoltage >= 6600) {
battery = 100;
} else {
- battery = (mVoltage - 5000) / 16;
+ battery = (iVoltage - 5000) / 16;
}
setBatteryPercent(battery);
return true;
- } else if ((data[16] & 255) == 185) { // Distance/Time/Fan Data
+ } else if ((data[16] & 255) == 185) { // Distance/Time/Fan Data 0xB9
long distance = byteArrayInt4(data[2], data[3], data[4], data[5]);
setDistance(distance);
//int currentTime = byteArrayInt2(data[6], data[7]);
@@ -797,7 +840,7 @@ private boolean decodeKingSong(byte[] data) {
setCurrentTime(currentTime);
setTopSpeed(byteArrayInt2(data[8], data[9]));
mFanStatus = data[12];
- } else if ((data[16] & 255) == 187) { // Name and Type data
+ } else if ((data[16] & 255) == 187) { // Name and Type data 0xBB
int end = 0;
int i = 0;
while (i < 14 && data[i + 2] != 0) {
@@ -818,12 +861,19 @@ private boolean decodeKingSong(byte[] data) {
} catch (Exception ignored) {
}
- } else if ((data[16] & 255) == 179) { // Serial Number
+ } else if ((data[16] & 255) == 179) { // Serial Number 0xB3
byte[] sndata = new byte[18];
System.arraycopy(data, 2, sndata, 0, 14);
System.arraycopy(data, 17, sndata, 14, 3);
sndata[17] = (byte) 0;
mSerialNumber = new String(sndata);
+ } else if ((data[16] & 0xff) == 0xb5) { // Speed Alarm report
+ nWheelSpeedAlarm1 = byteArrayInt2(data[4], data[5]);
+ nWheelSpeedAlarm2 = byteArrayInt2(data[6], data[7]);
+ nWheelSpeedAlarm3 = byteArrayInt2(data[8], data[9]);
+ mWheelMaxSpeed = byteArrayInt2(data[10], data[11]);
+
+ // here we need to adjust the PreferenceBars to reflect the readback
}
}
return false;
@@ -981,6 +1031,9 @@ void reset() {
mWheelLedEnabled = false;
mWheelButtonDisabled = false;
mWheelMaxSpeed = 25;
+ nWheelSpeedAlarm1 = 0;
+ nWheelSpeedAlarm2 = 0;
+ nWheelSpeedAlarm3 = 0;
mWheelSpeakerVolume = 50;
}
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 9fa7e08d..113958e7 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -7,7 +7,7 @@
- Disabled
- - On-board (KingSong)
+ - Built-In (KS/GW)
- via bluetooth audio
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bd370d62..c300ca4a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -87,6 +87,7 @@
watch_preferences
wheel_settings
trip_settings
+ VersionTag
// ALARM PREFERENCES
@@ -137,5 +138,4 @@
reset_user_distance
last_mac
-
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 8c713df1..3b3e7977 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -37,6 +37,14 @@
android:key="@string/reset_user_distance"
android:enabled="true"
android:title="Reset user distance" />
+
+
+ android:summary="If your wheel is a Gotway MCM, and it shows wrong speed, distance and others parameters, it should make them normal" />
+
+ android:summary="If your wheel is a Gotway with 20S (84V) battery" />
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/preferences_kingsong.xml b/app/src/main/res/xml/preferences_kingsong.xml
index 069bdc51..a433b099 100644
--- a/app/src/main/res/xml/preferences_kingsong.xml
+++ b/app/src/main/res/xml/preferences_kingsong.xml
@@ -1,6 +1,6 @@
-
+
+
-
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 8f591075..77771151 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.1.2'
+ classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
@@ -18,6 +18,7 @@ allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
+ google()
}
}
diff --git a/gradlew b/gradlew
index 9d82f789..cccdd3d5 100755
--- a/gradlew
+++ b/gradlew
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
##############################################################################
##
@@ -6,20 +6,38 @@
##
##############################################################################
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
-warn ( ) {
+warn () {
echo "$*"
}
-die ( ) {
+die () {
echo
echo "$*"
echo
@@ -30,6 +48,7 @@ die ( ) {
cygwin=false
msys=false
darwin=false
+nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
@@ -40,26 +59,11 @@ case "`uname`" in
MINGW* )
msys=true
;;
+ NONSTOP* )
+ nonstop=true
+ ;;
esac
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@@ -85,7 +89,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -150,11 +154,19 @@ if $cygwin ; then
esac
fi
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 8a0b282a..f9553162 100755
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -8,14 +8,14 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -46,10 +46,9 @@ echo location of your Java installation.
goto fail
:init
-@rem Get command-line arguments, handling Windowz variants
+@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
@@ -60,11 +59,6 @@ set _SKIP=2
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line