From 9e244ee772d7cd638b8479a3a503b358747bc8fe Mon Sep 17 00:00:00 2001 From: Ricky Barrette Date: Thu, 8 Mar 2012 09:59:32 -0500 Subject: [PATCH] Added a progress circle to the mapfragment the progress circle will be used to indicate that there is work being done in the background Change-Id: Id2929f5be68fce0d223e18d8dd07babfcdb37a34 Signed-off-by: Ricky Barrette --- LocationLib/.classpath | 1 + LocationLib/AndroidManifest.xml | 46 +++++------- LocationLib/bin/locationlib.jar | Bin 63330 -> 61427 bytes LocationLib/res/layout/map_fragment.xml | 31 ++++++-- .../TwentyCodes/android/SkyHook/SkyHook.java | 5 ++ .../android/SkyHook/SkyHookService.java | 12 ++- .../android/fragments/MapFragmentBase.java | 28 +++++++ .../SkyHoookUserOverlayMapFragment.java | 28 +++---- .../fragments/UserOverlayMapFragment.java | 29 +++----- .../location/GeoPointLocationListener.java | 7 ++ .../android/overlays/SkyHookUserOverlay.java | 5 ++ .../android/overlays/UserOverlay.java | 5 ++ .../android/overlays/UserOverlayBase.java | 69 ++---------------- 13 files changed, 129 insertions(+), 137 deletions(-) diff --git a/LocationLib/.classpath b/LocationLib/.classpath index d8cb310..ec62837 100644 --- a/LocationLib/.classpath +++ b/LocationLib/.classpath @@ -9,5 +9,6 @@ + diff --git a/LocationLib/AndroidManifest.xml b/LocationLib/AndroidManifest.xml index d9d8bc4..3fda38b 100644 --- a/LocationLib/AndroidManifest.xml +++ b/LocationLib/AndroidManifest.xml @@ -4,32 +4,6 @@ android:versionCode="11" android:versionName="0.1.1" > - - - - - - - - - - - - - - @@ -41,4 +15,24 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LocationLib/bin/locationlib.jar b/LocationLib/bin/locationlib.jar index f12ceec7661b5b63c68f2ad965027c10a4285ad8..af2caedb74c321f65c990449413094cd55c9b4c0 100644 GIT binary patch delta 20814 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%0AJ;3*f^-xb5jQQ~ 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 B?;rpG diff --git a/LocationLib/res/layout/map_fragment.xml b/LocationLib/res/layout/map_fragment.xml index f6e66ed..0c9c29a 100644 --- a/LocationLib/res/layout/map_fragment.xml +++ b/LocationLib/res/layout/map_fragment.xml @@ -1,11 +1,28 @@ - - \ No newline at end of file + --> + + + + + + \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHook.java b/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHook.java index 45b7629..b620cab 100644 --- a/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHook.java +++ b/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHook.java @@ -289,4 +289,9 @@ public class SkyHook implements GeoPointLocationListener{ if(mListener != null) mListener.onLocationChanged(point, accuracy); } + + @Override + public void onFirstFix(boolean isFistFix) { + // unused + } } \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHookService.java b/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHookService.java index d1e45b0..c8397df 100644 --- a/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHookService.java +++ b/LocationLib/src/com/TwentyCodes/android/SkyHook/SkyHookService.java @@ -235,19 +235,25 @@ public class SkyHookService extends Service implements GeoPointLocationListener, @Override public void done() { - // TODO Auto-generated method stub + // unused } @Override public WPSContinuation handleError(WPSReturnCode arg0) { - // TODO Auto-generated method stub + // unused return null; } @Override public void handleSuccess() { - // TODO Auto-generated method stub + // unused + + } + + @Override + public void onFirstFix(boolean isFistFix) { + // unused } } \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/fragments/MapFragmentBase.java b/LocationLib/src/com/TwentyCodes/android/fragments/MapFragmentBase.java index 9939432..015971e 100644 --- a/LocationLib/src/com/TwentyCodes/android/fragments/MapFragmentBase.java +++ b/LocationLib/src/com/TwentyCodes/android/fragments/MapFragmentBase.java @@ -11,6 +11,7 @@ import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ProgressBar; import com.TwentyCodes.android.location.MapView; import com.TwentyCodes.android.location.R; @@ -25,6 +26,8 @@ import com.google.android.maps.Overlay; public abstract class MapFragmentBase extends Fragment { private MapView mMapView; + private boolean isGPSDialogEnabled; + private ProgressBar mProgress; /** * Creates a new MapFragment @@ -65,6 +68,8 @@ public abstract class MapFragmentBase extends Fragment { mMapView = (MapView) view.findViewById(R.id.mapview); mMapView.setClickable(true); + + mProgress = (ProgressBar) view.findViewById(R.id.mapProgressBar); onMapViewCreate(mMapView); @@ -98,4 +103,27 @@ public abstract class MapFragmentBase extends Fragment { mMapView.getController().setCenter(point); return true; } + + /** + * Disables the Acquiring GPS dialog + * @author ricky barrette + */ + public void disableGPSProgess(){ + isGPSDialogEnabled = false; + mProgress.setVisibility(View.GONE); + } + + /** + * Enables the Acquiring GPS dialog if the location has not been acquired + * + * @author ricky barrette + */ + public void enableGPSProgess(){ + isGPSDialogEnabled = true; + mProgress.setVisibility(View.VISIBLE); + } + + public boolean isGPSProgessShowing(){ + return isGPSDialogEnabled; + } } \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/fragments/SkyHoookUserOverlayMapFragment.java b/LocationLib/src/com/TwentyCodes/android/fragments/SkyHoookUserOverlayMapFragment.java index 91445ac..ec9b5a7 100644 --- a/LocationLib/src/com/TwentyCodes/android/fragments/SkyHoookUserOverlayMapFragment.java +++ b/LocationLib/src/com/TwentyCodes/android/fragments/SkyHoookUserOverlayMapFragment.java @@ -31,22 +31,6 @@ public class SkyHoookUserOverlayMapFragment extends MapFragmentBase implements G public SkyHoookUserOverlayMapFragment() { super(); } - - /** - * disables the GPS dialog - * @author ricky barrette - */ - public void disableGPSDialog(){ - mUserOverlay.disableGPSDialog(); - } - - /** - * enables the GPS dialog - * @author ricky barrette - */ - public void enableGPSDialog(){ - mUserOverlay.enableGPSDialog(); - } /** * Tells the useroverlay to pan the map to follow the user @@ -96,7 +80,6 @@ public class SkyHoookUserOverlayMapFragment extends MapFragmentBase implements G mUserOverlay.registerListener(this); mUserOverlay.setCompassListener(this); mUserOverlay.enableCompass(); - mUserOverlay.disableGPSDialog(); mUserOverlay.followUser(true); map.getOverlays().add(mUserOverlay); @@ -120,8 +103,10 @@ public class SkyHoookUserOverlayMapFragment extends MapFragmentBase implements G @Override public void onResume() { super.onResume(); - if(mUserOverlay != null) + if(mUserOverlay != null) { mUserOverlay.enableMyLocation(); + addOverlay(mUserOverlay); + } } /** @@ -169,4 +154,9 @@ public class SkyHoookUserOverlayMapFragment extends MapFragmentBase implements G mGeoPointLocationListener = listener; } -} + @Override + public void onFirstFix(boolean isFistFix) { + if(mGeoPointLocationListener != null) + mGeoPointLocationListener.onFirstFix(isFistFix); + } +} \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/fragments/UserOverlayMapFragment.java b/LocationLib/src/com/TwentyCodes/android/fragments/UserOverlayMapFragment.java index 0b1fd2c..04d464a 100644 --- a/LocationLib/src/com/TwentyCodes/android/fragments/UserOverlayMapFragment.java +++ b/LocationLib/src/com/TwentyCodes/android/fragments/UserOverlayMapFragment.java @@ -32,22 +32,6 @@ public class UserOverlayMapFragment extends MapFragmentBase implements GeoPointL super(); } - /** - * disables the GPS dialog - * @author ricky barrette - */ - public void disableGPSDialog(){ - mUserOverlay.disableGPSDialog(); - } - - /** - * enables the GPS dialog - * @author ricky barrette - */ - public void enableGPSDialog(){ - mUserOverlay.enableGPSDialog(); - } - /** * Tells the useroverlay to pan the map to follow the user * @param followUser @@ -96,7 +80,6 @@ public class UserOverlayMapFragment extends MapFragmentBase implements GeoPointL mUserOverlay.registerListener(this); mUserOverlay.setCompassListener(this); mUserOverlay.enableCompass(); - mUserOverlay.disableGPSDialog(); mUserOverlay.followUser(true); map.getOverlays().add(mUserOverlay); @@ -120,8 +103,10 @@ public class UserOverlayMapFragment extends MapFragmentBase implements GeoPointL @Override public void onResume() { super.onResume(); - if(mUserOverlay != null) + if(mUserOverlay != null) { mUserOverlay.enableMyLocation(); + addOverlay(mUserOverlay); + } } /** @@ -168,4 +153,10 @@ public class UserOverlayMapFragment extends MapFragmentBase implements GeoPointL public void setGeoPointLocationListener(GeoPointLocationListener listener){ mGeoPointLocationListener = listener; } -} + + @Override + public void onFirstFix(boolean isFistFix) { + if(mGeoPointLocationListener != null) + mGeoPointLocationListener.onFirstFix(isFistFix); + } +} \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/location/GeoPointLocationListener.java b/LocationLib/src/com/TwentyCodes/android/location/GeoPointLocationListener.java index fed0162..dd25135 100644 --- a/LocationLib/src/com/TwentyCodes/android/location/GeoPointLocationListener.java +++ b/LocationLib/src/com/TwentyCodes/android/location/GeoPointLocationListener.java @@ -20,4 +20,11 @@ public interface GeoPointLocationListener { * @author ricky barrette */ public void onLocationChanged(GeoPoint point, int accuracy); + + /** + * Called when first fix is aquired + * @param isFirstFix + * @author ricky barrette + */ + public void onFirstFix(boolean isFirstFix); } diff --git a/LocationLib/src/com/TwentyCodes/android/overlays/SkyHookUserOverlay.java b/LocationLib/src/com/TwentyCodes/android/overlays/SkyHookUserOverlay.java index 26f0fff..c678b31 100644 --- a/LocationLib/src/com/TwentyCodes/android/overlays/SkyHookUserOverlay.java +++ b/LocationLib/src/com/TwentyCodes/android/overlays/SkyHookUserOverlay.java @@ -56,4 +56,9 @@ public class SkyHookUserOverlay extends UserOverlayBase{ mSkyHook.getUpdates(); } + @Override + public void onFirstFix(boolean isFistFix) { + // unused + } + } \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlay.java b/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlay.java index fb9e504..67e61ae 100644 --- a/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlay.java +++ b/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlay.java @@ -37,5 +37,10 @@ public class UserOverlay extends UserOverlayBase{ public void onMyLocationEnabled() { mAndroidGPS.enableLocationUpdates(this); } + + @Override + public void onFirstFix(boolean isFistFix) { + // unused + } } \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlayBase.java b/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlayBase.java index 977c04b..11f2488 100644 --- a/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlayBase.java +++ b/LocationLib/src/com/TwentyCodes/android/overlays/UserOverlayBase.java @@ -6,10 +6,7 @@ */ package com.TwentyCodes.android.overlays; -import android.app.AlertDialog; -import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; @@ -18,8 +15,6 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Point; -import android.os.Handler; -import android.os.SystemClock; import android.util.Log; import com.TwentyCodes.android.debug.Debug; @@ -117,13 +112,11 @@ public abstract class UserOverlayBase extends Overlay implements GeoPointLocatio private GeoPoint mPoint; private Context mContext; private MapView mMapView; - private ProgressDialog mGPSprogress; private boolean isFistFix = true; private GeoPointLocationListener mListener; public boolean isFollowingUser = true; private CompasOverlay mCompass; private boolean isCompassEnabled; - private boolean isGPSDialogEnabled; private CompassListener mCompassListener; @@ -162,16 +155,6 @@ public abstract class UserOverlayBase extends Overlay implements GeoPointLocatio mMapView.getOverlays().remove(mCompass); } - /** - * Disables the Acquiring GPS dialog - * @author ricky barrette - */ - public void disableGPSDialog(){ - isGPSDialogEnabled = false; - if(mGPSprogress != null) - mGPSprogress.dismiss(); - } - /** * Stops location updates and removes the overlay from view * @author ricky barrette @@ -181,8 +164,8 @@ public abstract class UserOverlayBase extends Overlay implements GeoPointLocatio onMyLocationDisabled(); isEnabled = false; mCompass.disable(); - if(mGPSprogress != null) - mGPSprogress.cancel(); + if(mListener != null) + mListener.onFirstFix(false); mAnimationThread.abort(); } @@ -298,22 +281,6 @@ public abstract class UserOverlayBase extends Overlay implements GeoPointLocatio } } - /** - * Enables the Acquiring GPS dialog if the location has not been acquired - * - * TODO fix funtion currently generates bad window token - * @author ricky barrette - */ - public void enableGPSDialog(){ - isGPSDialogEnabled = true; - if(isFistFix) - if(mGPSprogress != null){ - if(! mGPSprogress.isShowing()) - mGPSprogress = ProgressDialog.show(mContext, "", mContext.getText(R.string.gps_fix), true, true); - } else - mGPSprogress = ProgressDialog.show(mContext, "", mContext.getText(R.string.gps_fix), true, true); - } - /** * Attempts to enable MyLocation, registering for updates from provider * @author ricky barrette @@ -329,32 +296,8 @@ public abstract class UserOverlayBase extends Overlay implements GeoPointLocatio isEnabled = true; mCompass.enable(this); isFistFix = true; - if(isGPSDialogEnabled) - enableGPSDialog(); - - /** - * this is a message that tells the user that we are having trouble getting an GPS signal - */ - new Handler().postAtTime(new Runnable() { - @Override - public void run() { - if(mGPSprogress != null) - if (mGPSprogress.isShowing()) { - mGPSprogress.cancel(); - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - builder.setMessage( - mContext.getText(R.string.sorry_theres_trouble)) - .setCancelable(false) - .setPositiveButton(mContext.getText(android.R.string.ok), - new DialogInterface.OnClickListener() { - public void onClick( DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - builder.show(); - } - } - }, SystemClock.uptimeMillis()+90000L); + if(mListener != null) + mListener.onFirstFix(false); } } @@ -417,8 +360,8 @@ public abstract class UserOverlayBase extends Overlay implements GeoPointLocatio if(point != null && isFistFix){ mMapView.getController().setCenter(point); mMapView.getController().setZoom( (mMapView.getMaxZoomLevel() - 2) ); - if(mGPSprogress != null) - mGPSprogress.dismiss(); + if(mListener != null) + mListener.onFirstFix(true); isFistFix = false; }