From fd2947d9b84c197da4e4e60a6340167533ae6a7d Mon Sep 17 00:00:00 2001 From: chteufleur Date: Fri, 28 Sep 2018 16:01:31 +0200 Subject: [PATCH] Add menu to enable/disable vibration on approaching. --- .../mytrackingdog/MainActivity.java | 14 +++++++++- .../mytrackingdog/services/ServiceGps.java | 28 +++++++++++++++++-- app/src/main/res/menu/menu_main.xml | 8 ++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java index 1806d3c..cb42c42 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/MainActivity.java @@ -182,7 +182,10 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu textViewCurrentLocation.setVisibility(View.GONE); if (serviceGps == null) { - serviceGps = new ServiceGps((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)); + serviceGps = new ServiceGps( + (Vibrator) getSystemService(Context.VIBRATOR_SERVICE), + PreferenceManager.getDefaultSharedPreferences(ctx) + ); serviceGps.addObserver(this); } } @@ -369,6 +372,9 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); + + MenuItem vibrationObjectMenuItem = menu.findItem(R.id.action_active_vibration_object); + vibrationObjectMenuItem.setChecked(serviceGps.isVibrationNearObjectEnabled()); return true; } @@ -399,6 +405,12 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu Toast.makeText(ctx, "Aucune trace enregistré.", Toast.LENGTH_LONG).show(); } return true; + + } else if (id == R.id.action_active_vibration_object) { + boolean checked = item.isChecked(); + item.setChecked(!checked); + serviceGps.setVibrationNearObjectEnabled(!checked); + return true; } return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java index 5481473..b65cc0d 100644 --- a/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java +++ b/app/src/main/java/fr/chteufleur/mytrackingdog/services/ServiceGps.java @@ -1,6 +1,6 @@ package fr.chteufleur.mytrackingdog.services; -import android.content.res.Resources; +import android.content.SharedPreferences; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; @@ -36,6 +36,8 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe private static final String TAG = ServiceGps.class.getName(); public static final String NOTIF_NEW_LOCATION = "fr.chteufleur.mytrackingdog.services.servicegps.newlocation"; + private static final String PREF_VIBRATION_NEAR_OBJECT_ENABLED = "PREF_VIBRATION_NEAR_OBJECT_ENABLED"; + private File lastExportedTrailFile = null; private LocationManager locationManager; @@ -43,9 +45,15 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe private String appName = ""; private final Traces traces = new Traces(); + private final SharedPreferences preferences; - public ServiceGps(Vibrator vibrator) { + public ServiceGps(Vibrator vibrator, SharedPreferences preferences) { this.vibrator = vibrator; + this.preferences = preferences; + + if (preferences != null) { + this.vibrationNearObjectEnabled = preferences.getBoolean(PREF_VIBRATION_NEAR_OBJECT_ENABLED, false); + } } public void setLocationManager(LocationManager locationManager) { @@ -99,8 +107,22 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe } private final Vibrator vibrator; + private boolean vibrationNearObjectEnabled = false; private boolean nearObjectVibration = false; + public void setVibrationNearObjectEnabled(boolean b) { + this.vibrationNearObjectEnabled = b; + if (preferences != null) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(PREF_VIBRATION_NEAR_OBJECT_ENABLED, b); + editor.commit(); + } + } + + public boolean isVibrationNearObjectEnabled() { + return this.vibrationNearObjectEnabled; + } + @Override public void onLocationChanged(Location location) { Log.i(TAG, "onLocationChanged"); @@ -110,7 +132,7 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe notifyObservers(NOTIF_NEW_LOCATION); if (isDogActivated()) { - if (isNearObjects()) { + if (vibrationNearObjectEnabled && isNearObjects()) { if (!nearObjectVibration) { nearObjectVibration = true; vibrate(1_000); diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index e136983..33711fa 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -12,4 +12,12 @@ android:orderInCategory="100" android:title="@string/action_send_gpx_trail" app:showAsAction="never" /> + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d19a25..8275f4e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,4 +10,5 @@ Import GPX Envoyer trace du traceur Envoyer par + Active vibration objets