improve sensor and VoiceRouter settings setup

This commit is contained in:
Nazar 2019-07-04 14:17:30 +03:00
parent 2dd1f801ae
commit fd5d0c5697
7 changed files with 52 additions and 45 deletions

View file

@ -11,9 +11,10 @@
Thx - Hardy Thx - Hardy
--> -->
<string name="wake_on_voice_time_descr">Set the time for which the screen will turn on.</string> <string name="turn_screen_on_router">Wake on turn</string>
<string name="wake_on_voice_sensor">Use proximity sensor</string> <string name="turn_screen_on_time_descr">Set the time for which the screen will turn on.</string>
<string name="wake_on_voice_sensor_descr">Wave your hand over the top of the screen to turn on the screen while navigating.</string> <string name="turn_screen_on_sensor">Use proximity sensor</string>
<string name="turn_screen_on_sensor_descr">Wave your hand over the top of the screen to turn on the screen while navigating.</string>
<string name="app_profile_custom_nav_subtitle"></string> <string name="app_profile_custom_nav_subtitle"></string>
<string name="rate_dialog_descr">Please give us 30 seconds, share feedback and rate our work on Google Play.</string> <string name="rate_dialog_descr">Please give us 30 seconds, share feedback and rate our work on Google Play.</string>
<string name="button_rate">Rate</string> <string name="button_rate">Rate</string>

View file

@ -74,18 +74,20 @@
<PreferenceCategory <PreferenceCategory
android:key="turn_screen_on" android:key="turn_screen_on"
android:layout="@layout/preference_category_summary" android:title="@string/wake_on_voice">
android:title="@string/wake_on_voice"
android:summary="@string/wake_on_voice_descr">
<ListPreference <ListPreference
android:key="wake_on_voice_time_int" android:key="turn_screen_on_time_int"
android:summary="@string/wake_on_voice_time_descr" android:summary="@string/turn_screen_on_time_descr"
android:title="@string/shared_string_time"/> android:title="@string/shared_string_time"/>
<CheckBoxPreference <CheckBoxPreference
android:key="wake_on_voice_sensor" android:key="turn_screen_on_router"
android:summary="@string/wake_on_voice_sensor_descr" android:summary="@string/wake_on_voice_descr"
android:title="@string/wake_on_voice_sensor"/> android:title="@string/turn_screen_on_router"/>
<CheckBoxPreference
android:key="turn_screen_on_sensor"
android:summary="@string/turn_screen_on_sensor_descr"
android:title="@string/turn_screen_on_sensor"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory

View file

@ -1387,21 +1387,17 @@ public class OsmandSettings {
KEEP_INFORMING.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 0); KEEP_INFORMING.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 0);
} }
public final CommonPreference<Integer> WAKE_ON_VOICE_TIME_INT = new IntPreference("wake_on_voice_time_int", 0).makeProfile(); public final CommonPreference<Integer> TURN_SCREEN_ON_TIME_INT = new IntPreference("turn_screen_on_time_int", 0).makeGlobal();
public final CommonPreference<Boolean> TURN_SCREEN_ON_ROUTER = new BooleanPreference("turn_screen_on_router", false).makeProfile();
{ {
WAKE_ON_VOICE_TIME_INT.setModeDefaultValue(ApplicationMode.CAR, 0); TURN_SCREEN_ON_ROUTER.setModeDefaultValue(ApplicationMode.CAR, false);
WAKE_ON_VOICE_TIME_INT.setModeDefaultValue(ApplicationMode.BICYCLE, 0); TURN_SCREEN_ON_ROUTER.setModeDefaultValue(ApplicationMode.BICYCLE, false);
WAKE_ON_VOICE_TIME_INT.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 0); TURN_SCREEN_ON_ROUTER.setModeDefaultValue(ApplicationMode.PEDESTRIAN, false);
} }
public final CommonPreference<Boolean> WAKE_ON_VOICE_SENSOR = new BooleanPreference("wake_on_voice_sensor", false).makeProfile(); public final CommonPreference<Boolean> TURN_SCREEN_ON_SENSOR = new BooleanPreference("turn_screen_on_sensor", false).makeGlobal();
{
WAKE_ON_VOICE_SENSOR.setModeDefaultValue(ApplicationMode.CAR, false);
WAKE_ON_VOICE_SENSOR.setModeDefaultValue(ApplicationMode.BICYCLE, false);
WAKE_ON_VOICE_SENSOR.setModeDefaultValue(ApplicationMode.PEDESTRIAN, false);
}
// this value string is synchronized with settings_pref.xml preference name // this value string is synchronized with settings_pref.xml preference name
// try without AUTO_FOLLOW_ROUTE_NAV (see forum discussion 'Simplify our navigation preference menu') // try without AUTO_FOLLOW_ROUTE_NAV (see forum discussion 'Simplify our navigation preference menu')

View file

@ -1415,6 +1415,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
getMapView().refreshMap(true); getMapView().refreshMap(true);
} }
}); });
lockHelper.refreshProfilesSettings();
getMapView().refreshMap(true); getMapView().refreshMap(true);
} }

View file

@ -3,7 +3,6 @@ package net.osmand.plus.activities;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener; import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.content.Intent; import android.content.Intent;
import android.media.AudioManager; import android.media.AudioManager;
@ -17,19 +16,14 @@ import android.preference.PreferenceScreen;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView; import android.widget.TextView;
import net.osmand.plus.ApplicationMode; import net.osmand.plus.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuItem; import net.osmand.plus.ContextMenuItem;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings;
import net.osmand.plus.OsmandSettings.AutoZoomMap; import net.osmand.plus.OsmandSettings.AutoZoomMap;
@ -44,7 +38,6 @@ import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper;
import net.osmand.plus.routing.RouteProvider.RouteService; import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.voice.CommandPlayer; import net.osmand.plus.voice.CommandPlayer;
import net.osmand.router.GeneralRouter; import net.osmand.router.GeneralRouter;
import net.osmand.router.GeneralRouter.GeneralRouterProfile;
import net.osmand.router.GeneralRouter.RoutingParameter; import net.osmand.router.GeneralRouter.RoutingParameter;
import net.osmand.router.GeneralRouter.RoutingParameterType; import net.osmand.router.GeneralRouter.RoutingParameterType;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
@ -186,12 +179,12 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
selectAppModeDialog().show(); selectAppModeDialog().show();
} }
addWakeOnVoice((PreferenceGroup) screen.findPreference("turn_screen_on")); addTurnScreenOn((PreferenceGroup) screen.findPreference("turn_screen_on"));
addVoicePrefs((PreferenceGroup) screen.findPreference("voice")); addVoicePrefs((PreferenceGroup) screen.findPreference("voice"));
} }
private void addWakeOnVoice(PreferenceGroup screen) { private void addTurnScreenOn(PreferenceGroup screen) {
Integer[] screenPowerSaveValues = new Integer[] { 0, 5, 10, 15, 20, 30, 45, 60 }; Integer[] screenPowerSaveValues = new Integer[] { 0, 5, 10, 15, 20, 30, 45, 60 };
String[] screenPowerSaveNames = new String[screenPowerSaveValues.length]; String[] screenPowerSaveNames = new String[screenPowerSaveValues.length];
screenPowerSaveNames[0] = getString(R.string.shared_string_never); screenPowerSaveNames[0] = getString(R.string.shared_string_never);
@ -199,8 +192,9 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
screenPowerSaveNames[i] = screenPowerSaveValues[i] + " " screenPowerSaveNames[i] = screenPowerSaveValues[i] + " "
+ getString(R.string.int_seconds); + getString(R.string.int_seconds);
} }
registerListPreference(settings.WAKE_ON_VOICE_TIME_INT, screen, screenPowerSaveNames, screenPowerSaveValues); registerListPreference(settings.TURN_SCREEN_ON_TIME_INT, screen, screenPowerSaveNames, screenPowerSaveValues);
registerBooleanPreference(settings.WAKE_ON_VOICE_SENSOR, screen); registerBooleanPreference(settings.TURN_SCREEN_ON_ROUTER, screen);
registerBooleanPreference(settings.TURN_SCREEN_ON_SENSOR, screen);
} }
private void reloadVoiceListPreference(PreferenceScreen screen) { private void reloadVoiceListPreference(PreferenceScreen screen) {
@ -402,6 +396,13 @@ public class SettingsNavigationActivity extends SettingsBaseActivity {
return true; return true;
} }
super.onPreferenceChange(preference, newValue); super.onPreferenceChange(preference, newValue);
if (id.equals(settings.TURN_SCREEN_ON_ROUTER.getId())) {
boolean isRoutingListnerEnabled = Boolean.valueOf(newValue.toString());
getMyApplication().getLockHelper().setVoiceRouterListener(isRoutingListnerEnabled);
} else if (id.equals(settings.TURN_SCREEN_ON_SENSOR.getId())) {
boolean isSensorEnabled = Boolean.valueOf(newValue.toString());
getMyApplication().getLockHelper().setSensor(isSensorEnabled);
}
return true; return true;
} }

View file

@ -204,7 +204,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
} }
registerUnregisterSensor(location, smallSpeedForDirectionOfMovement); registerUnregisterSensor(location, smallSpeedForDirectionOfMovement);
if (settings.ANIMATE_MY_LOCATION.get() && !smallSpeedForAnimation && !movingToMyLocation && if (settings.ANIMATE_MY_LOCATION.get() && !smallSpeedForAnimation && !movingToMyLocation &&
settings.WAKE_ON_VOICE_TIME_INT.get() == 0) { settings.TURN_SCREEN_ON_TIME_INT.get() == 0) {
mapView.getAnimatedDraggingThread().startMoving( mapView.getAnimatedDraggingThread().startMoving(
location.getLatitude(), location.getLongitude(), zoom, rotation, false); location.getLatitude(), location.getLongitude(), zoom, rotation, false);
} else { } else {

View file

@ -11,6 +11,7 @@ import android.os.PowerManager;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.routing.VoiceRouter; import net.osmand.plus.routing.VoiceRouter;
public class LockHelper implements SensorEventListener { public class LockHelper implements SensorEventListener {
@ -25,6 +26,7 @@ public class LockHelper implements SensorEventListener {
private OsmandApplication app; private OsmandApplication app;
private LockRunnable lockRunnable; private LockRunnable lockRunnable;
private LockUIAdapter lockUIAdapter; private LockUIAdapter lockUIAdapter;
private OsmandSettings settings;
private VoiceRouter.VoiceMessageListener voiceMessageListener; private VoiceRouter.VoiceMessageListener voiceMessageListener;
@ -46,6 +48,7 @@ public class LockHelper implements SensorEventListener {
this.app = app; this.app = app;
uiHandler = new Handler(); uiHandler = new Handler();
lockRunnable = new LockRunnable(); lockRunnable = new LockRunnable();
settings = app.getSettings();
mSensorManager = (SensorManager) app.getSystemService(Context.SENSOR_SERVICE); mSensorManager = (SensorManager) app.getSystemService(Context.SENSOR_SERVICE);
mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
@ -56,9 +59,8 @@ public class LockHelper implements SensorEventListener {
unlockEvent(); unlockEvent();
} }
}; };
setVoiceRouterListener(true); refreshGlobalSettings();
setSensor(true);
} }
private void releaseWakeLocks() { private void releaseWakeLocks() {
@ -99,7 +101,7 @@ public class LockHelper implements SensorEventListener {
boolean isScreenOn = AndroidUtils.isScreenOn(app); boolean isScreenOn = AndroidUtils.isScreenOn(app);
boolean isScreenLocked = AndroidUtils.isScreenLocked(app); boolean isScreenLocked = AndroidUtils.isScreenLocked(app);
Integer screenPowerSave = app.getSettings().WAKE_ON_VOICE_TIME_INT.get(); Integer screenPowerSave = app.getSettings().TURN_SCREEN_ON_TIME_INT.get();
if ((isScreenOn || isScreenLocked) && screenPowerSave > 0) { if ((isScreenOn || isScreenLocked) && screenPowerSave > 0) {
timedUnlock(screenPowerSave * 1000L); timedUnlock(screenPowerSave * 1000L);
@ -113,11 +115,9 @@ public class LockHelper implements SensorEventListener {
@Override @Override
public void onSensorChanged(SensorEvent event) { public void onSensorChanged(SensorEvent event) {
if (isSensorEnabled()) { if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) { if (event.values[0] >= -SENSOR_SENSITIVITY && event.values[0] <= SENSOR_SENSITIVITY) {
if (event.values[0] >= -SENSOR_SENSITIVITY && event.values[0] <= SENSOR_SENSITIVITY) { unlockEvent();
unlockEvent();
}
} }
} }
} }
@ -139,8 +139,14 @@ public class LockHelper implements SensorEventListener {
} }
} }
private boolean isSensorEnabled() { public void refreshProfilesSettings() {
return app.getSettings().WAKE_ON_VOICE_SENSOR.get(); boolean isVRListenerEnabled = settings.TURN_SCREEN_ON_ROUTER.get();
setVoiceRouterListener(isVRListenerEnabled);
}
public void refreshGlobalSettings() {
boolean isSensorEnabled = settings.TURN_SCREEN_ON_SENSOR.get();
setSensor(isSensorEnabled);
} }
public void setLockUIAdapter(LockUIAdapter adapter) { public void setLockUIAdapter(LockUIAdapter adapter) {