diff --git a/app/build.gradle b/app/build.gradle
index 50cc0c72..6b900b84 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,15 +33,15 @@ android {
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.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.github.PhilJay:MPAndroidChart:v3.0.0'
- implementation "com.github.hotchemi:permissionsdispatcher:2.2.0"
- annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:2.2.0"
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile 'com.android.support:design:25+'
+ compile 'com.android.support:gridlayout-v7:25.1.0'
+ compile 'com.google.android.gms:play-services-drive:10.0.1'
+ compile 'com.getpebble:pebblekit:3.1.0'
+ compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
+ compile 'com.jakewharton.timber:timber:4.3.1'
+ compile 'com.pavelsikun:material-seekbar-preference:2.3.0+'
+ compile 'com.github.PhilJay:MPAndroidChart:v3.0.0'
+ compile '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/MainActivity.java b/app/src/main/java/com/cooper/wheellog/MainActivity.java
index 6b5c13b2..d75b4af7 100644
--- a/app/src/main/java/com/cooper/wheellog/MainActivity.java
+++ b/app/src/main/java/com/cooper/wheellog/MainActivity.java
@@ -964,6 +964,7 @@ private void loadPreferences() {
wheelView.invalidate();
boolean alarms_enabled = sharedPreferences.getBoolean(getString(R.string.alarms_enabled), false);
+ boolean inMotion_general_alarms_enable = sharedPreferences.getBoolean(getString(R.string.inMotion_alarms_enabled),false);
boolean use_ratio = sharedPreferences.getBoolean(getString(R.string.use_ratio), false);
WheelData.getInstance().setUseRatio(use_ratio);
@@ -974,6 +975,8 @@ private void loadPreferences() {
//WheelData.getInstance().setGotway84V(gotway_84v);
WheelData.getInstance().setAlarmsEnabled(alarms_enabled);
+ WheelData.getInstance().setInmotionAlarmsEnabled(inMotion_general_alarms_enable);
+
if (alarms_enabled) {
int alarm1Speed = sharedPreferences.getInt(getString(R.string.alarm_1_speed), 0);
int alarm2Speed = sharedPreferences.getInt(getString(R.string.alarm_2_speed), 0);
diff --git a/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java b/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java
index 833c3d18..e8ad9149 100644
--- a/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java
+++ b/app/src/main/java/com/cooper/wheellog/PreferencesFragment.java
@@ -70,6 +70,10 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
case "alarms_enabled":
hideShowSeekBars();
break;
+ case "inMotion_alarms_enabled":
+ WheelData.getInstance().setInmotionAlarmsEnabled(getPreferenceManager().getSharedPreferences()
+ .getBoolean(getString(R.string.inMotion_alarms_enabled), false));
+ break;
case "auto_upload":
if (SettingsUtil.isAutoUploadEnabled(getActivity()) && !mDataWarningDisplayed) {
SettingsUtil.setAutoUploadEnabled(getActivity(), false);
diff --git a/app/src/main/java/com/cooper/wheellog/WheelData.java b/app/src/main/java/com/cooper/wheellog/WheelData.java
index 1d19dccf..56a0b369 100644
--- a/app/src/main/java/com/cooper/wheellog/WheelData.java
+++ b/app/src/main/java/com/cooper/wheellog/WheelData.java
@@ -1,12 +1,15 @@
package com.cooper.wheellog;
+import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Application;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothGattService;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.media.MediaPlayer;
import android.os.Vibrator;
import android.text.InputType;
@@ -28,6 +31,7 @@ public class WheelData {
private static final int TIME_BUFFER = 10;
private static WheelData mInstance;
private Timer ridingTimerControl;
+ private MediaPlayer mAlertSoundPlayer;
private BluetoothLeService mBluetoothLeService;
@@ -68,6 +72,7 @@ public class WheelData {
private String mBtName = "";
private String mAlert = "";
+ private int mAlertId = 0;
// private int mVersion; # sorry King, but INT not good for Inmo
private String mVersion = "";
@@ -84,6 +89,7 @@ public class WheelData {
private int mWheelTiltHorizon = 0;
private boolean mAlarmsEnabled = false;
+ private boolean mInmotionAlarmsEnabled = false;
private boolean mDisablePhoneVibrate = false;
private int mAlarm1Speed = 0;
private int mAlarm2Speed = 0;
@@ -101,6 +107,7 @@ public class WheelData {
private boolean mSpeedAlarmExecuted = false;
private boolean mCurrentAlarmExecuted = false;
private boolean mTemperatureAlarmExecuted = false;
+ private boolean mGeneralInMotionAlarmExecuted = false;
static void initiate() {
if (mInstance == null)
@@ -573,6 +580,10 @@ void setConnected(boolean connected) {
void setAlarmsEnabled(boolean enabled) {
mAlarmsEnabled = enabled;
}
+
+ void setInmotionAlarmsEnabled(boolean enabled){
+ mInmotionAlarmsEnabled = enabled;
+ }
void setUseRatio(boolean enabled) {
mUseRatio = enabled;
@@ -680,11 +691,25 @@ else if (mAlarm3Speed > 0 && mAlarm3Battery > 0 &&
if (mTemperature < mAlarmTemperature)
mTemperatureAlarmExecuted = false;
}
+
}
+ private void checkInMotionAlarmStatus(Context mContext) {
+ // GENERAL inMotion Alarm
+ if (!mGeneralInMotionAlarmExecuted)
+ {
+ if (mAlertId != 0) {
+ raiseAlarm(ALARM_TYPE.GENERAL,mContext);
+ mAlertId = 0;
+ }
+ }
+ }
+
private void raiseAlarm(ALARM_TYPE alarmType, Context mContext) {
Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
+ MediaPlayer mp = new MediaPlayer();
+
long[] pattern = {0};
Intent intent = new Intent(Constants.ACTION_ALARM_TRIGGERED);
intent.putExtra(Constants.INTENT_EXTRA_ALARM_TYPE, alarmType);
@@ -702,8 +727,24 @@ private void raiseAlarm(ALARM_TYPE alarmType, Context mContext) {
pattern = new long[]{0, 500, 100, 100, 100, 500, 100, 100, 100, 500, 100, 100, 100};
mCurrentAlarmExecuted = true;
break;
+ case GENERAL:
+ if (mp.isPlaying() == false) {
+ mp = MediaPlayer.create(mContext, R.raw.bicycle_bell);
+ mp.start();
+ //That fires after the sound has played so it releases the resourse.
+ //Needed otherwise it would stop working after a while
+ mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ public void onCompletion(MediaPlayer mp) {
+ mp.reset();
+ mp.release();
+ mGeneralInMotionAlarmExecuted = false;
+ }
+ });
+ }
+ break;
}
mContext.sendBroadcast(intent);
+
if (v.hasVibrator() && !mDisablePhoneVibrate)
v.vibrate(pattern, -1);
}
@@ -758,6 +799,9 @@ else if (mWheelType == WHEEL_TYPE.NINEBOT_Z) {
if (mAlarmsEnabled)
checkAlarmStatus(mContext);
+ if (mInmotionAlarmsEnabled)
+ checkInMotionAlarmStatus(mContext);
+
mContext.sendBroadcast(intent);
@@ -998,6 +1042,11 @@ private boolean decodeInmotion(byte[] data) {
} else {
mAlert = mAlert + " | " + ((InMotionAdapter.Alert) status).getfullText();
}
+ mAlertId = ((InMotionAdapter.Alert) status).getAlertId(); //mAlertId is checked on checkAlarms function.
+ if (mAlertId == 0x05) //Discards alerts that the user does not need.
+ {
+ mAlertId = 0;
+ }
} else {
mSpeed = (int) (status.getSpeed() * 360d);
mVoltage = (int) (status.getVoltage() * 100d);
diff --git a/app/src/main/java/com/cooper/wheellog/utils/Constants.java b/app/src/main/java/com/cooper/wheellog/utils/Constants.java
index 2234c26f..a229b8bc 100644
--- a/app/src/main/java/com/cooper/wheellog/utils/Constants.java
+++ b/app/src/main/java/com/cooper/wheellog/utils/Constants.java
@@ -98,7 +98,8 @@ public int getValue() {
public enum ALARM_TYPE {
SPEED(0),
CURRENT(1),
- TEMPERATURE(2);
+ TEMPERATURE(2),
+ GENERAL(3);
private final int value;
diff --git a/app/src/main/java/com/cooper/wheellog/utils/InMotionAdapter.java b/app/src/main/java/com/cooper/wheellog/utils/InMotionAdapter.java
index 32feeb75..c996fa75 100644
--- a/app/src/main/java/com/cooper/wheellog/utils/InMotionAdapter.java
+++ b/app/src/main/java/com/cooper/wheellog/utils/InMotionAdapter.java
@@ -519,6 +519,9 @@ public String getfullText() {
return fullText;
}
+ public int getAlertId(){
+ return alertId;
+ }
}
diff --git a/app/src/main/java/com/cooper/wheellog/views/WheelView.java b/app/src/main/java/com/cooper/wheellog/views/WheelView.java
index 15ef9240..0ad70d08 100644
--- a/app/src/main/java/com/cooper/wheellog/views/WheelView.java
+++ b/app/src/main/java/com/cooper/wheellog/views/WheelView.java
@@ -490,6 +490,7 @@ protected void onDraw(Canvas canvas) {
canvas.drawText(getResources().getString(R.string.distance), blRect.centerX(), blRect.centerY() - (box_inner_padding / 2), textPaint);
canvas.drawText(getResources().getString(R.string.total), brRect.centerX(), brRect.centerY() - (box_inner_padding / 2), textPaint);
+ //canvas.drawText(String.format(Locale.US, "%.2fV (%.2fV)", mVoltage, (mVoltage/16.0)), tlRect.centerX(), tlRect.centerY() + boxTextHeight, textPaint);
canvas.drawText(String.format(Locale.US, "%.2fV", mVoltage), tlRect.centerX(), tlRect.centerY() + boxTextHeight, textPaint);
//canvas.drawText(String.format(Locale.US, "%.2fW", mCurrent), trRect.centerX(), trRect.centerY() + boxTextHeight, textPaint);
canvas.drawText(mCurrentTime, mlRect.centerX(), mlRect.centerY() + boxTextHeight + (box_inner_padding / 2), textPaint);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 98d2c83f..68d21122 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -91,6 +91,7 @@
// ALARM PREFERENCES
+ inMotion_alarms_enabled
alarms_enabled
disable_phone_vibrate
alarm_1_speed
diff --git a/app/src/main/res/xml/preferences_alarms.xml b/app/src/main/res/xml/preferences_alarms.xml
index 6326d9a5..92f215f4 100644
--- a/app/src/main/res/xml/preferences_alarms.xml
+++ b/app/src/main/res/xml/preferences_alarms.xml
@@ -8,6 +8,11 @@
android:title="Enable Alarms"
android:summary="Allow the phone to vibrate as a warning" />
+
+