From f31ff44d7929c225e4c9372abed9c6b7afe2a484 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 18 Dec 2015 09:03:13 +0100 Subject: [PATCH] [android] #3317 #3239 - SpriteFactory Singleton, added different custom markers to InfoWindowActivity --- .../mapboxsdk/annotations/SpriteFactory.java | 50 +++++++++--------- .../com/mapbox/mapboxsdk/views/MapView.java | 10 ++-- .../src/main/assets/commercial-24.png | Bin 0 -> 308 bytes .../src/main/assets/london-underground-24.png | Bin 0 -> 729 bytes .../src/main/assets/town-hall-24.png | Bin 0 -> 552 bytes .../mapboxsdk/testapp/InfoWindowActivity.java | 30 ++++++++++- .../testapp/InfoWindowAdapterActivity.java | 2 +- 7 files changed, 57 insertions(+), 35 deletions(-) create mode 100755 platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/commercial-24.png create mode 100755 platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/london-underground-24.png create mode 100755 platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/town-hall-24.png diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java index 3395c5039..948f03ebb 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java @@ -7,12 +7,13 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Build; +import android.support.annotation.DrawableRes; +import android.support.annotation.NonNull; import android.util.DisplayMetrics; import android.view.WindowManager; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.exceptions.TooManySpritesException; -import com.mapbox.mapboxsdk.views.MapView; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -23,17 +24,25 @@ public final class SpriteFactory { private static final String SPRITE_ID_PREFIX = "com.mapbox.sprites.sprite_"; - private MapView mMapView; + private Context mContext; + private static SpriteFactory sInstance; private Sprite mDefaultMarker; private BitmapFactory.Options mOptions; private int mNextId = 0; - public SpriteFactory(MapView mapView) { - mMapView = mapView; + public static synchronized SpriteFactory getInstance(@NonNull Context context) { + if (sInstance == null) { + sInstance = new SpriteFactory(context.getApplicationContext()); + } + return sInstance; + } + + private SpriteFactory(@NonNull Context context) { + mContext = context; DisplayMetrics realMetrics = null; DisplayMetrics metrics = new DisplayMetrics(); - WindowManager wm = (WindowManager) mMapView.getContext().getSystemService(Context.WINDOW_SERVICE); + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { realMetrics = new DisplayMetrics(); @@ -48,31 +57,23 @@ public final class SpriteFactory { if (realMetrics != null) { mOptions.inScreenDensity = realMetrics.densityDpi; } - } - public Sprite fromBitmap(Bitmap bitmap) { - if (bitmap == null) { - return null; - } - + public Sprite fromBitmap(@NonNull Bitmap bitmap) { if (mNextId < 0) { throw new TooManySpritesException(); } String id = SPRITE_ID_PREFIX + ++mNextId; - return new Sprite(id, bitmap); } - public Sprite fromDrawable(Drawable drawable) { + public Sprite fromDrawable(@NonNull Drawable drawable) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); - return fromDrawable(drawable, width, height); } - - public Sprite fromDrawable(Drawable drawable, int width, int height) { + public Sprite fromDrawable(@NonNull Drawable drawable, int width, int height) { if ((width < 0) || (height < 0)) { return null; } @@ -84,12 +85,11 @@ public final class SpriteFactory { drawable.setBounds(bounds); drawable.draw(canvas); drawable.setBounds(temp); - return fromBitmap(bitmap); } - public Sprite fromResource(int resourceId) { - Bitmap bitmap = BitmapFactory.decodeResource(mMapView.getResources(), resourceId); + public Sprite fromResource(@DrawableRes int resourceId) { + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), resourceId); return fromBitmap(bitmap); } @@ -100,30 +100,30 @@ public final class SpriteFactory { return mDefaultMarker; } - private Sprite fromInputStream(InputStream is) { + private Sprite fromInputStream(@NonNull InputStream is) { Bitmap bitmap = BitmapFactory.decodeStream(is, null, mOptions); return fromBitmap(bitmap); } - public Sprite fromAsset(String assetName) { + public Sprite fromAsset(@NonNull String assetName) { InputStream is; try { - is = mMapView.getContext().getAssets().open(assetName); + is = mContext.getAssets().open(assetName); } catch (IOException e) { return null; } return fromInputStream(is); } - public Sprite fromPath(String absolutePath) { + public Sprite fromPath(@NonNull String absolutePath) { Bitmap bitmap = BitmapFactory.decodeFile(absolutePath, mOptions); return fromBitmap(bitmap); } - public Sprite fromFile(String fileName) { + public Sprite fromFile(@NonNull String fileName) { FileInputStream is; try { - is = mMapView.getContext().openFileInput(fileName); + is = mContext.openFileInput(fileName); } catch (FileNotFoundException e) { return null; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java index 670e5d473..67ac9c48f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java @@ -219,8 +219,7 @@ public final class MapView extends FrameLayout { private List mSelectedMarkers = new ArrayList<>(); private List mInfoWindows = new ArrayList<>(); private InfoWindowAdapter mInfoWindowAdapter; - private SpriteFactory mSpriteFactory; - private ArrayList mSprites = new ArrayList<>(); + private List mSprites = new ArrayList<>(); // Used for the Mapbox Logo private ImageView mLogoView; @@ -229,7 +228,7 @@ public final class MapView extends FrameLayout { private ImageView mAttributionsView; // Used to manage MapChange event listeners - private ArrayList mOnMapChangedListener = new ArrayList<>(); + private List mOnMapChangedListener = new ArrayList<>(); // Used to manage map click event listeners private OnMapClickListener mOnMapClickListener; @@ -1834,10 +1833,7 @@ public final class MapView extends FrameLayout { // public SpriteFactory getSpriteFactory() { - if (mSpriteFactory == null) { - mSpriteFactory = new SpriteFactory(this); - } - return mSpriteFactory; + return SpriteFactory.getInstance(getContext()); } private void loadSprite(Sprite sprite) { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/commercial-24.png b/platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/commercial-24.png new file mode 100755 index 0000000000000000000000000000000000000000..61f570fc4ed5b11d8b1a04d6a2d631d0b3f6df56 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Lc5P)xK~zYI)s?Yp6Hy$;KTSjuTjDkKXvv_sIHVxT6{G?0LR5s} z+NDc}OhHP-6iNPq1Zl)jBvXbgS+Yt&)RH?PrO-nWlEFoE2rV(`8CnyBBo4hRX=!bw zjp7&H^7y{*_x--_z26(^cDoD`wt=eu4TE!iaE5@(z$L&1TmXIm4d5H_6*xBMlMKcI z@AC4pU)S~9hGAT7Hk%Vpr*l&fgwK*By<1pVC;(+(>&V^x=8&%x3Wa;=boybvUcYf1 z$?bN32!%o~{C@vy;7h*-VyRTR8;wSvwOXwS0GrMBb8Kwv{pjduWqW(uQ>)c(b~>H& z01k&^Gm%I7OWba^??xh#ge=P|z#4mbugS8!5{X0-cDsESz%UGN zCX<e+WFwkCPVW8b~pTjBsgMJK7h5!Fg9=O3T)ygOsBRz0p00000 LNkvXXu0mjfww^|X literal 0 HcmV?d00001 diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/town-hall-24.png b/platform/android/MapboxGLAndroidSDKTestApp/src/main/assets/town-hall-24.png new file mode 100755 index 0000000000000000000000000000000000000000..d7986df2983c5cd90bcc7fcfce962a4669349850 GIT binary patch literal 552 zcmV+@0@wYCP)VNi^dh+`R8)!JKeqe{XXCKd-s0t zIr{xR^VGsz>A>O?u})weSOs2yN8oc@(xerv0J~Dk!)P>mA*DP7b_e5@a*X*0PGG%W zuLpCv+;OYb+8KTjLfoX&>GMD!P{X1cD}xmvD5c!5R;$Tgueba=z~yqig~Q=OCX=}W zYQXCx2Bxz%lT|gN47R0|s@bf~WT>VL+*%nNObWHo%A|P zN+-s#k=t|@xLKZMAE>H&8i_=-;k%+JwQM$fq$o&~2<#Kr>WA10s|1)s>5%-((+rXdC=RzvKbL3? q*krnE)Jz}11MoENMzgKC_rVu9#iraGc;^QI0000