diff --git a/LocationRinger/AndroidManifest.xml b/LocationRinger/AndroidManifest.xml
index fafa2f5..5c5d204 100644
--- a/LocationRinger/AndroidManifest.xml
+++ b/LocationRinger/AndroidManifest.xml
@@ -5,7 +5,7 @@
android:versionCode="248"
android:versionName="8cc52de" >
-
+
+
diff --git a/LocationRinger/res/layout/map_info_fragment.xml b/LocationRinger/res/layout/map_info_fragment.xml
index d5d189a..6695962 100644
--- a/LocationRinger/res/layout/map_info_fragment.xml
+++ b/LocationRinger/res/layout/map_info_fragment.xml
@@ -48,12 +48,12 @@
android:visibility="gone" />
+ class="com.google.android.gms.maps.SupportMapFragment" >
diff --git a/LocationRinger/src/org/RickBarrette/android/LocationRinger/services/RingerProcessingService.java b/LocationRinger/src/org/RickBarrette/android/LocationRinger/services/RingerProcessingService.java
index dc786bc..60b474d 100644
--- a/LocationRinger/src/org/RickBarrette/android/LocationRinger/services/RingerProcessingService.java
+++ b/LocationRinger/src/org/RickBarrette/android/LocationRinger/services/RingerProcessingService.java
@@ -23,7 +23,6 @@ import android.net.wifi.WifiManager;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
-import android.provider.Settings;
import com.TwentyCodes.android.debug.LocationLibraryConstants;
import com.TwentyCodes.android.exception.ExceptionHandler;
import com.TwentyCodes.android.location.GeoUtils;
@@ -133,17 +132,19 @@ public class RingerProcessingService extends Service {
/*
* airplane mode
+ *
+ * TODO fix airplane mode or remove it
*/
- if (values.containsKey(RingerDatabase.KEY_AIRPLANE_MODE)) {
- final boolean airplaneModeEnabled = !RingerDatabase.parseBoolean(values.getAsString(RingerDatabase.KEY_AIRPLANE_MODE));
- // toggle airplane mode
- Log.d(TAG, "airplane mode has be set " + Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, airplaneModeEnabled ? 0 : 1));
-
- // Post an intent to reload
- final Intent changeMode = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
- changeMode.putExtra("state", !airplaneModeEnabled);
- this.sendBroadcast(changeMode);
- }
+// if (values.containsKey(RingerDatabase.KEY_AIRPLANE_MODE)) {
+// final boolean airplaneModeEnabled = !RingerDatabase.parseBoolean(values.getAsString(RingerDatabase.KEY_AIRPLANE_MODE));
+// // toggle airplane mode
+// Log.d(TAG, "airplane mode has be set " + Settings.Global.getInt(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, airplaneModeEnabled ? 0 : 1));
+//
+// // Post an intent to reload
+// final Intent changeMode = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+// changeMode.putExtra("state", !airplaneModeEnabled);
+// this.sendBroadcast(changeMode);
+// }
}
/**
diff --git a/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/ListActivity.java b/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/ListActivity.java
index 93c80aa..6804613 100644
--- a/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/ListActivity.java
+++ b/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/ListActivity.java
@@ -239,7 +239,7 @@ public class ListActivity extends Activity implements OnItemClickListener, OnCli
info.put(RingerDatabase.KEY_RINGTONE_VOLUME, am.getStreamVolume(AudioManager.STREAM_RING));
info.put(RingerDatabase.KEY_BT, bt.isEnabled());
info.put(RingerDatabase.KEY_WIFI, wifi.isWifiEnabled());
- info.put(RingerDatabase.KEY_AIRPLANE_MODE, Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0);
+ info.put(RingerDatabase.KEY_AIRPLANE_MODE, Settings.System.getInt(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0);
new Handler().post(new Runnable() {
@Override
@@ -296,7 +296,7 @@ public class ListActivity extends Activity implements OnItemClickListener, OnCli
@Override
public void onItemClick(final AdapterView> arg0, final View v, final int postion, final long id) {
- final ProgressDialog progress = null; //ProgressDialog.show(this.getParent(), "", getText(R.string.loading), true, true);
+// final ProgressDialog progress = ProgressDialog.show(this.getParent(), "", getText(R.string.loading), true, true);
new Thread(new Runnable() {
@Override
@@ -327,7 +327,7 @@ public class ListActivity extends Activity implements OnItemClickListener, OnCli
i.putExtra(KEY_INFO, mDb.getRingerInfo(r.getAsString(RingerDatabase.KEY_RINGER_NAME)));
}
- progress.dismiss();
+// progress.dismiss();
// start the ringer info activity in editor mode
startActivityForResult(i, ACTIVITY_EDIT);
diff --git a/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/RingerInformationActivity.java b/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/RingerInformationActivity.java
index 798671d..b3b9a35 100644
--- a/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/RingerInformationActivity.java
+++ b/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/RingerInformationActivity.java
@@ -17,7 +17,7 @@ import org.RickBarrette.android.LocationRinger.R;
import org.RickBarrette.android.LocationRinger.db.RingerDatabase;
import org.RickBarrette.android.LocationRinger.ui.fragments.AboutRingerFragment;
import org.RickBarrette.android.LocationRinger.ui.fragments.FeatureListFragment;
-import org.RickBarrette.android.LocationRinger.ui.fragments.LocationInfomationFragment;
+import org.RickBarrette.android.LocationRinger.ui.fragments.LocationInformationFragment;
import android.annotation.SuppressLint;
import android.app.Activity;
@@ -51,7 +51,7 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
private ContentValues mInfo;
private Intent mData;
private ViewPager mPager;
- private LocationInfomationFragment mLocationInfomationFragment;
+ private LocationInformationFragment mLocationInfomationFragment;
/**
* Logs the content values
@@ -119,7 +119,7 @@ public class RingerInformationActivity extends FragmentActivity implements OnCon
* Location page
*/
if (!isDefault) {
- mLocationInfomationFragment = new LocationInfomationFragment(mInfo, this, this);
+ mLocationInfomationFragment = new LocationInformationFragment(mInfo, this, this);
fragments.add(mLocationInfomationFragment);
}
diff --git a/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/fragments/LocationInfomationFragment.java b/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/fragments/LocationInformationFragment.java
similarity index 61%
rename from LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/fragments/LocationInfomationFragment.java
rename to LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/fragments/LocationInformationFragment.java
index 6e3a5d6..fefc182 100644
--- a/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/fragments/LocationInfomationFragment.java
+++ b/LocationRinger/src/org/RickBarrette/android/LocationRinger/ui/fragments/LocationInformationFragment.java
@@ -8,6 +8,7 @@ package org.RickBarrette.android.LocationRinger.ui.fragments;
import android.annotation.SuppressLint;
import android.content.ContentValues;
+import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@@ -21,10 +22,11 @@ import com.TwentyCodes.android.location.AndroidGPS;
import com.TwentyCodes.android.location.GeoUtils;
import com.TwentyCodes.android.location.LatLngListener;
import com.TwentyCodes.android.location.OnLocationSelectedListener;
-import com.TwentyCodes.android.overlays.RadiusOverlay;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
-import com.google.android.gms.maps.MapFragment;
+import com.google.android.gms.maps.SupportMapFragment;
+import com.google.android.gms.maps.model.Circle;
+import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import org.RickBarrette.android.LocationRinger.*;
import org.RickBarrette.android.LocationRinger.db.RingerDatabase;
@@ -37,28 +39,27 @@ import org.RickBarrette.android.LocationRinger.ui.SearchDialog;
* @author ricky
*/
@SuppressLint("ValidFragment")
-public class LocationInfomationFragment extends Fragment implements LatLngListener, OnClickListener, OnCheckedChangeListener, OnSeekBarChangeListener,
- OnLocationSelectedListener, SearchRequestedListener {
+public class LocationInformationFragment extends Fragment implements LatLngListener, OnClickListener, OnCheckedChangeListener, OnSeekBarChangeListener, SearchRequestedListener, GoogleMap.OnMapClickListener, OnLocationSelectedListener {
private static final String TAG = "RingerInformationHowActivity";
private final ContentValues mInfo;
private final OnContentChangedListener mListener;
private final EnableScrollingListener mEnableScrollingListener;
private SeekBar mRadius;
- private MapFragment mMap;
+ private GoogleMap mMap;
private ToggleButton mMapEditToggle;
- private RadiusOverlay mRadiusOverlay;
private LatLng mPoint;
private AndroidGPS mGPS;
private View view;
private TextView mRadiusTextView;
+ private Circle mCircle;
/**
* Creates a new MapFragment
*
* @author ricky barrette
*/
- public LocationInfomationFragment(final ContentValues info, final OnContentChangedListener listener, final EnableScrollingListener enabledListener) {
+ public LocationInformationFragment(final ContentValues info, final OnContentChangedListener listener, final EnableScrollingListener enabledListener) {
mInfo = info;
mListener = listener;
mEnableScrollingListener = enabledListener;
@@ -76,14 +77,16 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
if (mEnableScrollingListener != null)
mEnableScrollingListener.setScrollEnabled(!isChecked);
-// /*if (isChecked) {
-// mGPS.enableLocationUpdates(this);
+ if (isChecked) {
+ mGPS.enableLocationUpdates(this);
// mMap.enableGPSProgess();
-// } else {
-// mGPS.disableLocationUpdates();
+ mMap.setOnMapClickListener(this);
+ } else {
+ mGPS.disableLocationUpdates();
// mMap.disableGPSProgess();
-// }
-//
+ mMap.setOnMapClickListener(null);
+ }
+
// mMap.setDoubleTapZoonEnabled(isChecked);
// // buttons
// mMap.setBuiltInZoomControls(isChecked);
@@ -102,14 +105,14 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
switch (v.getId()) {
case R.id.mark_my_location:
if (mPoint != null)
- onLocationSelected(mPoint);
+ onMapClick(mPoint);
break;
case R.id.my_location:
if (mPoint != null)
- mMap.getMap().moveCamera(CameraUpdateFactory.newLatLng(mPoint));
+ mMap.moveCamera(CameraUpdateFactory.newLatLng(mPoint));
break;
case R.id.map_mode:
- mMap.getMap().setMapType(mMap.getMap().getMapType() == GoogleMap.MAP_TYPE_NORMAL ? GoogleMap.MAP_TYPE_NORMAL : GoogleMap.MAP_TYPE_SATELLITE);
+ mMap.setMapType(mMap.getMapType() == GoogleMap.MAP_TYPE_NORMAL ? GoogleMap.MAP_TYPE_SATELLITE : GoogleMap.MAP_TYPE_NORMAL);
break;
case R.id.search:
new SearchDialog(getActivity(), this).show();
@@ -120,10 +123,10 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
view = inflater.inflate(R.layout.map_info_fragment, container, false);
+ setUpMapIfNeeded();
mGPS = new AndroidGPS(getActivity());
-// mMap = (MapFragment) getFragmentManager().findFragmentById(R.id.mapview);
mRadius = (SeekBar) view.findViewById(R.id.radius);
mRadiusTextView = (TextView) view.findViewById(R.id.radius_textview);
mRadius.setMax(Constraints.MAX_RADIUS_IN_METERS);
@@ -134,29 +137,22 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
mMapEditToggle = (ToggleButton) view.findViewById(R.id.map_edit_toggle);
mMapEditToggle.setChecked(false);
mMapEditToggle.setOnCheckedChangeListener(this);
- mRadiusOverlay = new RadiusOverlay();
- mRadiusOverlay.setLocationSelectedListener(this);
+
mRadius.setOnSeekBarChangeListener(this);
- mMap.getMap().addCircle(mRadiusOverlay.getCircleOptions());
mRadius.setEnabled(false);
if (mInfo.get(RingerDatabase.KEY_LOCATION) != null) {
final String[] point = mInfo.getAsString(RingerDatabase.KEY_LOCATION).split(",");
- mRadiusOverlay.setLocation(new LatLng(Integer.parseInt(point[0]), Integer.parseInt(point[1])));
+ final LatLng location = new LatLng(Double.parseDouble(point[0]), Double.parseDouble(point[1]));
+
+ mCircle.setCenter(location);
+ mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 14));
}
- if (mInfo.get(RingerDatabase.KEY_RADIUS) != null)
+ if (mInfo.get(RingerDatabase.KEY_RADIUS) != null) {
mRadius.setProgress(mInfo.getAsInteger(RingerDatabase.KEY_RADIUS));
-
- if (mRadiusOverlay.getLocation() != null) {
- mMap.getMap().moveCamera(CameraUpdateFactory.newLatLng(mRadiusOverlay.getLocation()));
- //todo zoom
-// mMap.setZoom(16);
}
- //
-// mMap.setDoubleTapZoonEnabled(false);
-
view.findViewById(R.id.my_location).setOnClickListener(this);
view.findViewById(R.id.mark_my_location).setOnClickListener(this);
view.findViewById(R.id.search).setOnClickListener(this);
@@ -169,31 +165,30 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
* Called when the location is a first fix (non-Javadoc)
*
* todo fix this
- *
+ *
* @see com.TwentyCodes.android.location.LatLngListener#onFirstFix(boolean)
*/
@Override
public void onFirstFix(final boolean isFirstFix) {
-// if (mPoint != null) {
-// /*
-// * if this is the first fix and the radius overlay does not have a
-// * point specified then pan the map, and zoom in to the users
-// * current location
-// */
-// if (isFirstFix) {
+ if (mPoint != null) {
+ /*
+ * if this is the first fix and the radius overlay does not have a
+ * point specified then pan the map, and zoom in to the users
+ * current location
+ */
+ if (isFirstFix) {
// mMap.disableGPSProgess();
-// if (mRadiusOverlay.getLocation() == null)
-// if (mMap != null) {
-// mMap.setMapCenter(mPoint);
-// mMap.setZoom(mMap.getMap().getMaxZoomLevel() - 5);
-// }
-// }
-// } else
+ if (mMap != null) {
+ mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mPoint, 14));
+ }
+ }
+ }
+// else
// mMap.enableGPSProgess();
}
/**
- * Called when skyhook has a location to report
+ * Called when the GPS has a location to report
*
* @author ricky barrette
*/
@@ -202,31 +197,6 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
mPoint = point;
}
- /**
- * Called when a location has been selected (non-Javadoc)
- *
-// * @see com.TwentyCodes.android.location.OnLocationSelectedListener#onLocationSelected(com.google.android.maps.GeoPoint)
- */
- @Override
- public void onLocationSelected(final LatLng point) {
- if (point != null) {
- Log.d(TAG, "onLocationSelected() " + point.toString());
-
- if (mRadiusOverlay != null)
- mRadiusOverlay.setLocation(point);
-
- if (mMap != null)
- mMap.getMap().moveCamera(CameraUpdateFactory.newLatLng(point));
-
- if (mListener != null) {
- final ContentValues info = new ContentValues();
- info.put(RingerDatabase.KEY_LOCATION, point.toString());
- mListener.onInfoContentChanged(info);
- }
- } else
- Log.d(TAG, "onLocationSelected() Location was null");
- }
-
/**
* (non-Javadoc)
*
@@ -247,7 +217,7 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
switch (seekBar.getId()) {
case R.id.radius:
mRadiusTextView.setText(GeoUtils.distanceToString(Float.valueOf(progress) / 1000, true));
- mRadiusOverlay.setRadius(progress);
+ mCircle.setRadius(progress);
//todo invalidate this shit
// mMap.invalidate();
if (mListener != null) {
@@ -267,6 +237,7 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
public void onResume() {
if (mMapEditToggle.isChecked())
mGPS.enableLocationUpdates(this);
+ setUpMapIfNeeded();
super.onResume();
}
@@ -301,4 +272,84 @@ public class LocationInfomationFragment extends Fragment implements LatLngListen
@Override
public void onStopTrackingTouch(final SeekBar seekBar) {
}
+
+ /**
+ * Sets up the map if it is possible to do so (i.e., the Google Play services APK is correctly
+ * installed) and the map has not already been instantiated.. This will ensure that we only ever
+ * call {@link #setUpMap()} once when {@link #mMap} is not null.
+ *
+ * If it isn't installed {@link SupportMapFragment} (and
+ * {@link com.google.android.gms.maps.MapView MapView}) will show a prompt for the user to
+ * install/update the Google Play services APK on their device.
+ *
+ * A user can return to this FragmentActivity after following the prompt and correctly
+ * installing/updating/enabling the Google Play services. Since the FragmentActivity may not have been
+ * completely destroyed during this process (it is likely that it would only be stopped or
+ * paused), {@link #onCreate(Bundle)} may not be called again so we should call this method in
+ * {@link #onResume()} to guarantee that it will be called.
+ */
+ private void setUpMapIfNeeded() {
+ // Do a null check to confirm that we have not already instantiated the map.
+ if (mMap == null) {
+ // Try to obtain the map from the SupportMapFragment.
+ mMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
+ // Check if we were successful in obtaining the map.
+ if (mMap != null) {
+ setUpMap();
+ }
+ }
+ }
+
+ /**
+ * This is where we can add markers or lines, add listeners or move the camera.
+ * This should only be called once and when we are sure that {@link #mMap} is not null.
+ */
+ private void setUpMap() {
+
+ final CircleOptions circle = new CircleOptions();
+ circle.strokeColor(Color.GREEN);
+ circle.fillColor(Color.argb(100, 0, 255, 0));
+ circle.center(new LatLng(0, 0));
+ circle.radius(0);
+ mCircle = mMap.addCircle(circle);
+
+ if (mCircle.getCenter() != null) {
+ mMap.moveCamera(CameraUpdateFactory.newLatLng(mCircle.getCenter()));
+ //todo zoom
+// mMap.setZoom(16);
+ }
+
+
+// mMap.addCircle(mRadiusOverlay.getCircleOptions());
+
+ //
+// mMap.setDoubleTapZoonEnabled(false);
+ }
+
+ @Override
+ public void onMapClick(LatLng point) {
+ if (point != null) {
+ Log.d(TAG, "onLocationSelected() " + point.toString());
+
+ if (mCircle != null)
+ mCircle.setCenter(point);
+
+ if (mMap != null)
+ mMap.moveCamera(CameraUpdateFactory.newLatLng(point));
+
+ if (mListener != null) {
+ final ContentValues info = new ContentValues();
+ final StringBuilder sb = new StringBuilder();
+ sb.append(point.latitude).append(",").append(point.longitude);
+ info.put(RingerDatabase.KEY_LOCATION, sb.toString());
+ mListener.onInfoContentChanged(info);
+ }
+ } else
+ Log.d(TAG, "onLocationSelected() Location was null");
+ }
+
+ @Override
+ public void onLocationSelected(LatLng point) {
+ onMapClick(point);
+ }
}
\ No newline at end of file