diff --git a/mobile/plugins/user-location.user.js b/mobile/plugins/user-location.user.js
index 03cf5f7e..24a76147 100644
--- a/mobile/plugins/user-location.user.js
+++ b/mobile/plugins/user-location.user.js
@@ -94,13 +94,25 @@ window.plugin.userLocation.onLocationChange = function(lat, lng) {
};
window.plugin.userLocation.onOrientationChange = function(direction) {
- $(".container", window.plugin.userLocation.marker._icon)
- .removeClass("circle")
- .addClass("arrow")
- .css({
- "transform": "rotate(" + direction + "deg)",
- "webkitTransform": "rotate(" + direction + "deg)"
- });
+ var container = $(".container", window.plugin.userLocation.marker._icon);
+
+ if(direction === null) {
+ container
+ .removeClass("arrow")
+ .addClass("circle")
+ .css({
+ "transform": "",
+ "webkitTransform": ""
+ });
+ } else {
+ container
+ .removeClass("circle")
+ .addClass("arrow")
+ .css({
+ "transform": "rotate(" + direction + "deg)",
+ "webkitTransform": "rotate(" + direction + "deg)"
+ });
+ }
}
var setup = window.plugin.userLocation.setup;
diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml
index e6fb797d..3b5c6a26 100644
--- a/mobile/res/values/strings.xml
+++ b/mobile/res/values/strings.xml
@@ -83,11 +83,7 @@
Tweaks
IITC Plugins
Available plugins
- User location
- Display user location
- Show users position on map
- Use sensor orientation
- Experimental! Fancier but eats battery packs for breakfast
+ Display user location on map
Show zoom control
Shows +/- buttons even on multitouch capable devices.
Hide in fullscreen mode
@@ -128,6 +124,16 @@
- 8
- 16
+
+ - Don\'t show user position
+ - Show user position on map
+ - Show user position and orientation on map
+
+
+ - 0
+ - 1
+ - 2
+
Clear Cookies
Search
diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml
index 089dcebc..7e6d0a8d 100644
--- a/mobile/res/xml/preferences.xml
+++ b/mobile/res/xml/preferences.xml
@@ -14,33 +14,26 @@
-
-
-
-
+
+
+
+ android:title="@string/pref_fullscreen"/>
+
-
+ android:title="@string/pref_external_storage"/>
+ android:defaultValue="false"
+ android:key="pref_press_twice_to_exit"
+ android:summary="@string/pref_press_twice_to_exit_sum"
+ android:title="@string/pref_press_twice_to_exit"/>
-
+
\ No newline at end of file
diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
index 97293ed7..c6d8d07f 100644
--- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
+++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java
@@ -88,8 +88,7 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis
mIitcWebView.updateFullscreenStatus();
mUserLocation = new IITC_UserLocation(this);
- mUserLocation.setLocationEnabled(mSharedPrefs.getBoolean("pref_user_loc", false));
- mUserLocation.setSensorEnabled(mSharedPrefs.getBoolean("pref_user_loc_sensor", true));
+ mUserLocation.setLocationMode(Integer.parseInt(mSharedPrefs.getString("pref_user_location_mode", "0")));
// pass ActionBar to helper because we deprecated getActionBar
mNavigationHelper = new IITC_NavigationHelper(this, super.getActionBar());
@@ -111,10 +110,11 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis
if (key.equals("pref_force_desktop")) {
mDesktopMode = sharedPreferences.getBoolean("pref_force_desktop", false);
mNavigationHelper.onPrefChanged();
- } else if (key.equals("pref_user_loc")) {
- mUserLocation.setLocationEnabled(sharedPreferences.getBoolean("pref_user_loc", false));
- } else if (key.equals("pref_user_loc_sensor")) {
- mUserLocation.setSensorEnabled(sharedPreferences.getBoolean("pref_user_loc_sensor", true));
+ } else if (key.equals("pref_user_location_mode")) {
+ int mode = Integer.parseInt(mSharedPrefs.getString("pref_user_location_mode", "0"));
+ if (mUserLocation.setLocationMode(mode))
+ mReloadNeeded = true;
+ return;
} else if (key.equals("pref_fullscreen")) {
mIitcWebView.updateFullscreenStatus();
mNavigationHelper.onPrefChanged();
@@ -247,43 +247,41 @@ public class IITC_Mobile extends Activity implements OnSharedPreferenceChangeLis
protected void onStart() {
super.onStart();
- // enough idle...let's do some work
- Log.d("iitcm", "resuming...reset idleTimer");
- mUserLocation.onStart();
-
if (mReloadNeeded) {
Log.d("iitcm", "preference had changed...reload needed");
reloadIITC();
} else {
// iitc is not fully booted...timer will be reset by the script itself
if (findViewById(R.id.imageLoading).getVisibility() == View.GONE) {
+ // enough idle...let's do some work
+ Log.d("iitcm", "resuming...reset idleTimer");
mIitcWebView.loadUrl("javascript: window.idleReset();");
}
}
+
+ mUserLocation.onStart();
}
@Override
protected void onResume() {
+ super.onResume();
mIitcWebView.resumeTimers();
mIitcWebView.onResume();
- super.onResume();
}
@Override
protected void onPause() {
+ super.onPause();
mIitcWebView.pauseTimers();
mIitcWebView.onPause();
- super.onPause();
}
@Override
protected void onStop() {
+ super.onStop();
Log.d("iitcm", "stopping iitcm");
mIitcWebView.loadUrl("javascript: window.idleSet();");
-
mUserLocation.onStop();
-
- super.onStop();
}
@Override
diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_UserLocation.java b/mobile/src/com/cradle/iitc_mobile/IITC_UserLocation.java
index de6834a8..dfa81c67 100644
--- a/mobile/src/com/cradle/iitc_mobile/IITC_UserLocation.java
+++ b/mobile/src/com/cradle/iitc_mobile/IITC_UserLocation.java
@@ -12,15 +12,15 @@ import android.os.Bundle;
import android.view.Surface;
public class IITC_UserLocation implements LocationListener, SensorEventListener {
- private static final double SENSOR_DELAY_USER = 100*1e6;
- private boolean mLocationEnabled = false;
- private boolean mSensorEnabled = true;
+ private static final double SENSOR_DELAY_USER = 100 * 1e6; // 100 milliseconds
+ private int mMode = 0;
+ private boolean mRunning = false;
+ private boolean mLocationRegistered = false;
+ private boolean mOrientationRegistered = false;
private long mLastUpdate = 0;
private IITC_Mobile mIitc;
private Location mLastLocation = null;
private LocationManager mLocationManager;
- private boolean mRegistered = false;
- private boolean mRunning = false;
private Sensor mSensorAccelerometer, mSensorMagnetometer;
private SensorManager mSensorManager = null;
float[] mValuesGravity = null, mValuesGeomagnetic = null;
@@ -35,51 +35,44 @@ public class IITC_UserLocation implements LocationListener, SensorEventListener
mSensorMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
- private void registerListeners() {
- if (mRegistered) return;
- mRegistered = true;
+ private void updateListeners() {
+ boolean useLocation = mRunning && mMode != 0;
+ boolean useOrientation = mRunning && mMode == 2;
- try {
- mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
- } catch (IllegalArgumentException e) {
- // if the given provider doesn't exist
- e.printStackTrace();
+ if (useLocation && !mLocationRegistered) {
+ try {
+ mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
+ } catch (IllegalArgumentException e) {
+ // if the given provider doesn't exist
+ e.printStackTrace();
+ }
+ try {
+ mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
+ } catch (IllegalArgumentException e) {
+ // if the given provider doesn't exist
+ e.printStackTrace();
+ }
+ mLocationRegistered = true;
}
- try {
- mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
- } catch (IllegalArgumentException e) {
- // if the given provider doesn't exist
- e.printStackTrace();
+ if (!useLocation && mLocationRegistered) {
+ mLocationManager.removeUpdates(this);
+ mLocationRegistered = false;
}
- if (mSensorAccelerometer != null && mSensorMagnetometer != null && mSensorEnabled) {
+ if (useOrientation && !mOrientationRegistered && mSensorAccelerometer != null && mSensorMagnetometer != null) {
mSensorManager.registerListener(this, mSensorAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, mSensorMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
+ mOrientationRegistered = true;
}
- }
-
- private void unregisterListeners() {
- if (!mRegistered) return;
- mRegistered = false;
-
- mLocationManager.removeUpdates(this);
-
- if (mSensorAccelerometer != null && mSensorMagnetometer != null && mSensorEnabled) {
+ if (!useOrientation && mOrientationRegistered && mSensorAccelerometer != null && mSensorMagnetometer != null) {
mSensorManager.unregisterListener(this, mSensorAccelerometer);
mSensorManager.unregisterListener(this, mSensorMagnetometer);
+ mOrientationRegistered = false;
}
-
- }
-
- private void updateListeners() {
- if (mRunning && mLocationEnabled)
- registerListeners();
- else
- unregisterListeners();
}
public boolean hasCurrentLocation() {
- if (!mRegistered) return false;
+ if (!mLocationRegistered) return false;
return mLastLocation != null;
}
@@ -98,6 +91,12 @@ public class IITC_UserLocation implements LocationListener, SensorEventListener
public void onStart() {
mRunning = true;
updateListeners();
+
+ // in case we just switched from loc+sensor to loc-only, let javascript know
+ if (mMode == 1) {
+ mIitc.getWebView().loadJS("if(window.plugin && window.plugin.userLocation)"
+ + "window.plugin.userLocation.onOrientationChange(null);");
+ }
}
public void onStop() {
@@ -105,18 +104,19 @@ public class IITC_UserLocation implements LocationListener, SensorEventListener
updateListeners();
}
- public void setLocationEnabled(boolean enabled) {
- if (enabled == mLocationEnabled) return;
+ /**
+ * set the location mode to use. Available modes:
+ * 0: don't show user's position
+ * 1: show user's position
+ * 2: show user's position and orientation
+ *
+ * @return whether a reload is needed to reflect the changes made to the preferences
+ */
+ public boolean setLocationMode(int mode) {
+ boolean needsReload = (mode == 0 && mMode != 0) || (mode != 0 && mMode == 0);
+ mMode = mode;
- mLocationEnabled = enabled;
- updateListeners();
- }
-
- public void setSensorEnabled(boolean enabled) {
- if (enabled == mSensorEnabled) return;
-
- mSensorEnabled = enabled;
- updateListeners();
+ return needsReload;
}
// ------------------------------------------------------------------------
@@ -140,12 +140,10 @@ public class IITC_UserLocation implements LocationListener, SensorEventListener
@Override
public void onProviderDisabled(String provider) {
-
}
@Override
public void onProviderEnabled(String provider) {
-
}
@Override
@@ -165,15 +163,15 @@ public class IITC_UserLocation implements LocationListener, SensorEventListener
@Override
public void onSensorChanged(SensorEvent event) {
- // save some battery 10 updates per second should be enough
- if ((event.timestamp - mLastUpdate) < SENSOR_DELAY_USER) return;
- mLastUpdate = event.timestamp;
-
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mValuesGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mValuesGeomagnetic = event.values;
+ // save some battery, 10 updates per second should be enough
+ if ((event.timestamp - mLastUpdate) < SENSOR_DELAY_USER) return;
+ mLastUpdate = event.timestamp;
+
// do not touch the javascript while iitc boots
if (mIitc.isLoading()) return;
diff --git a/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java b/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java
index 77ccac2b..461e034b 100644
--- a/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java
+++ b/mobile/src/com/cradle/iitc_mobile/fragments/MainSettings.java
@@ -6,6 +6,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.preference.EditTextPreference;
+import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
@@ -54,6 +55,20 @@ public class MainSettings extends PreferenceFragment {
// first init of summary
String pref_iitc_source_sum = getString(R.string.pref_select_iitc_sum) + " " + pref_iitc_source.getText();
pref_iitc_source.setSummary(pref_iitc_source_sum);
+
+ final ListPreference pref_user_location_mode = (ListPreference) findPreference("pref_user_location_mode");
+ pref_user_location_mode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ int mode = Integer.parseInt((String) newValue);
+ preference.setSummary(getResources().getStringArray(R.array.pref_user_location_titles)[mode]);
+ return true;
+ }
+ });
+
+ String value = getPreferenceManager().getSharedPreferences().getString("pref_user_location_mode", "0");
+ int mode = Integer.parseInt(value);
+ pref_user_location_mode.setSummary(getResources().getStringArray(R.array.pref_user_location_titles)[mode]);
}
// we want a home button + HomeAsUpEnabled in nested preferences
@@ -63,8 +78,7 @@ public class MainSettings extends PreferenceFragment {
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference.getTitle().toString().equals(getString(R.string.pref_advanced_options))
- || preference.getTitle().toString().equals(getString(R.string.pref_about_title))
- || preference.getTitle().toString().equals(getString(R.string.pref_user_loc_screen))) {
+ || preference.getTitle().toString().equals(getString(R.string.pref_about_title))) {
initializeActionBar((PreferenceScreen) preference);
}
return super.onPreferenceTreeClick(preferenceScreen, preference);