diff --git a/build.gradle b/build.gradle index 1c86c0b7..406fd400 100644 --- a/build.gradle +++ b/build.gradle @@ -9,9 +9,18 @@ buildscript { apply plugin: 'com.android.application' +repositories { + mavenLocal() + mavenCentral() +} + dependencies { - compile 'com.android.support:support-v4:21.0.2' - compile 'com.android.support:appcompat-v7:21.0.2' + compile 'com.android.support:support-v4:21.0.3' + compile 'com.android.support:appcompat-v7:21.0.3' + compile 'org.oscim:vtm-android:0.6.0-SNAPSHOT' + compile 'org.oscim:vtm-extras:0.6.0-SNAPSHOT' + compile 'org.oscim:vtm-themes:0.6.0-SNAPSHOT' + compile project(':GmsApi') compile project(':UnifiedNlpLib') } @@ -31,6 +40,7 @@ android { java.srcDirs = ['src'] aidl.srcDirs = ['src'] res.srcDirs = ['res'] + assets.srcDirs = ['assets'] } } diff --git a/src/com/google/android/auth/IAuthManagerService.aidl b/src/com/google/android/auth/IAuthManagerService.aidl deleted file mode 100644 index 3cb2ce81..00000000 --- a/src/com/google/android/auth/IAuthManagerService.aidl +++ /dev/null @@ -1,6 +0,0 @@ -package com.google.android.auth; - -interface IAuthManagerService { - Bundle getToken(String accountName, String scope, in Bundle extras); - Bundle clearToken(String token, in Bundle extras); -} diff --git a/src/com/google/android/gms/common/internal/IGmsCallbacks.aidl b/src/com/google/android/gms/common/internal/IGmsCallbacks.aidl deleted file mode 100644 index 3e5e2deb..00000000 --- a/src/com/google/android/gms/common/internal/IGmsCallbacks.aidl +++ /dev/null @@ -1,5 +0,0 @@ -package com.google.android.gms.common.internal; - -interface IGmsCallbacks { - void onPostInitComplete(int statusCode, IBinder binder, in Bundle params); -} diff --git a/src/com/google/android/gms/common/internal/IGmsServiceBroker.aidl b/src/com/google/android/gms/common/internal/IGmsServiceBroker.aidl deleted file mode 100644 index 9b1c508b..00000000 --- a/src/com/google/android/gms/common/internal/IGmsServiceBroker.aidl +++ /dev/null @@ -1,30 +0,0 @@ -package com.google.android.gms.common.internal; - -import com.google.android.gms.common.internal.IGmsCallbacks; - -interface IGmsServiceBroker { - void getPlusService(IGmsCallbacks callback, int code, String str1, String str2, in String[] paramArrayOfString, String str3, in Bundle params); - void getPanoramaService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getAppDataSearchService(IGmsCallbacks callback, int code, String str); - void getWalletService(IGmsCallbacks callback, int code); - void getPeopleService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getReportingService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getLocationService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getGoogleLocationManagerService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getGamesService(IGmsCallbacks callback, int code, String str1, String str2, in String[] args, String str3, IBinder binder, String str4, in Bundle params); - void getAppStateService(IGmsCallbacks callback, int code, String str1, String str2, in String[] args); - void getPlayLogService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getAdMobService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getDroidGuardService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getLockboxService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getCastMirroringService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getNetworkQualityService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getGoogleIdentityService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getGoogleFeedbackService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getCastService(IGmsCallbacks callback, int code, String str, IBinder binder, in Bundle params); - void getDriveService(IGmsCallbacks callback, int code, String str1, in String[] args, String str2, in Bundle params); - void getLightweightAppDataSearchService(IGmsCallbacks callback, int code, String str); - void getSearchAdministrationService(IGmsCallbacks callback, int code, String str); - void getAutoBackupService(IGmsCallbacks callback, int code, String str, in Bundle params); - void getAddressService(IGmsCallbacks callback, int code, String str); -} diff --git a/src/com/google/android/gms/common/safeparcel/SafeParcelable.java b/src/com/google/android/gms/common/safeparcel/SafeParcelable.java deleted file mode 100644 index c3b6cd6d..00000000 --- a/src/com/google/android/gms/common/safeparcel/SafeParcelable.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.common.safeparcel; - -import android.os.Parcelable; - -public interface SafeParcelable extends Parcelable { - public static final String NULL = "SAFE_PARCELABLE_NULL_STRING"; - int SAFE_PARCEL_MAGIC = 20293; -} diff --git a/src/com/google/android/gms/common/safeparcel/SafeReader.java b/src/com/google/android/gms/common/safeparcel/SafeReader.java deleted file mode 100644 index 6dd73983..00000000 --- a/src/com/google/android/gms/common/safeparcel/SafeReader.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.common.safeparcel; - -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; - -public class SafeReader { - public static int halfOf(int i) { - return i & 0xFFFF; - } - - public static int readSingleInt(Parcel parcel) { - return parcel.readInt(); - } - - private static int readStart(Parcel parcel, int first) { - if ((first & 0xFFFF0000) != -65536) - return first >> 16 & 0xFFFF; - return parcel.readInt(); - } - - private static void readStart(Parcel parcel, int position, int length) { - int i = readStart(parcel, position); - if (i != length) - throw new ReadException("Expected size " + length + " got " + i + " (0x" + Integer.toHexString(i) + ")", parcel); - } - - public static int readStart(Parcel parcel) { - int first = readSingleInt(parcel); - int length = readStart(parcel, first); - int start = parcel.dataPosition(); - if (halfOf(first) != SafeParcelable.SAFE_PARCEL_MAGIC) - throw new ReadException("Expected object header. Got 0x" + Integer.toHexString(first), parcel); - int end = start + length; - if ((end < start) || (end > parcel.dataSize())) - throw new ReadException("Size read is invalid start=" + start + " end=" + end, parcel); - return end; - } - - public static int readInt(Parcel parcel, int position) { - readStart(parcel, position, 4); - return parcel.readInt(); - } - - public static byte readByte(Parcel parcel, int position) { - readStart(parcel, position, 4); - return (byte) parcel.readInt(); - } - - public static short readShort(Parcel parcel, int position) { - readStart(parcel, position, 4); - return (short) parcel.readInt(); - } - - public static boolean readBool(Parcel parcel, int position) { - readStart(parcel, position, 4); - return parcel.readInt() != 0; - } - - public static long readLong(Parcel parcel, int position) { - readStart(parcel, position, 8); - return parcel.readLong(); - } - - public static float readFloat(Parcel parcel, int position) { - readStart(parcel, position, 4); - return parcel.readFloat(); - } - - public static double readDouble(Parcel parcel, int position) { - readStart(parcel, position, 8); - return parcel.readDouble(); - } - - public static String readString(Parcel parcel, int position) { - int length = readStart(parcel, position); - int start = parcel.dataPosition(); - if (length == 0) - return null; - String string = parcel.readString(); - parcel.setDataPosition(start + length); - return string; - } - - public static IBinder readBinder(Parcel parcel, int position) { - int length = readStart(parcel, position); - int start = parcel.dataPosition(); - if (length == 0) - return null; - IBinder binder = parcel.readStrongBinder(); - parcel.setDataPosition(start + length); - return binder; - } - - public static T readParcelable(Parcel parcel, int position, Parcelable.Creator creator) { - int length = readStart(parcel, position); - int start = parcel.dataPosition(); - if (length == 0) - return null; - T t = creator.createFromParcel(parcel); - parcel.setDataPosition(start + length); - return t; - } - - public static void skip(Parcel parcel, int position) { - int i = readStart(parcel, position); - parcel.setDataPosition(parcel.dataPosition() + i); - } - - public static class ReadException extends RuntimeException { - public ReadException(String message, Parcel parcel) { - super(message); - } - } -} diff --git a/src/com/google/android/gms/common/safeparcel/SafeWriter.java b/src/com/google/android/gms/common/safeparcel/SafeWriter.java deleted file mode 100644 index af59e8a7..00000000 --- a/src/com/google/android/gms/common/safeparcel/SafeWriter.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.common.safeparcel; - -import android.os.Bundle; -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; - -import java.util.List; - -public class SafeWriter { - - private static void writeStart(Parcel parcel, int position, int length) { - if (length >= 65535) { - parcel.writeInt(0xFFFF0000 | position); - parcel.writeInt(length); - } else { - parcel.writeInt(length << 16 | position); - } - } - - public static int writeStart(Parcel parcel) { - return writeStart(parcel, SafeParcelable.SAFE_PARCEL_MAGIC); - } - - private static int writeStart(Parcel parcel, int position) { - parcel.writeInt(0xFFFF0000 | position); - parcel.writeInt(0); - return parcel.dataPosition(); - } - - public static void writeEnd(Parcel parcel, int start) { - int end = parcel.dataPosition(); - int length = end - start; - parcel.setDataPosition(start - 4); - parcel.writeInt(length); - parcel.setDataPosition(end); - } - - public static void write(Parcel parcel, int position, boolean val) { - writeStart(parcel, position, 4); - parcel.writeInt(val ? 1 : 0); - } - - public static void write(Parcel parcel, int position, byte val) { - writeStart(parcel, position, 4); - parcel.writeInt(val); - } - - public static void write(Parcel parcel, int position, short val) { - writeStart(parcel, position, 4); - parcel.writeInt(val); - } - - public static void write(Parcel parcel, int position, int val) { - writeStart(parcel, position, 4); - parcel.writeInt(val); - } - - public static void write(Parcel parcel, int position, long val) { - writeStart(parcel, position, 8); - parcel.writeLong(val); - } - - public static void write(Parcel parcel, int position, float val) { - writeStart(parcel, position, 4); - parcel.writeFloat(val); - } - - public static void write(Parcel parcel, int position, double val) { - writeStart(parcel, position, 8); - parcel.writeDouble(val); - } - - public static void write(Parcel parcel, int position, String val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeString(val); - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, Parcelable val, int flags, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - val.writeToParcel(parcel, flags); - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, Bundle val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeBundle(val); - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, byte[] val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeByteArray(val); - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, String[] val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeStringArray(val); - writeEnd(parcel, start); - } - } - - public static void writeStringList(Parcel parcel, int position, List val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeStringList(val); - writeEnd(parcel, start); - } - } - - private static void writeArrayPart(Parcel parcel, T val, int flags) { - int before = parcel.dataPosition(); - parcel.writeInt(1); - int start = parcel.dataPosition(); - val.writeToParcel(parcel, flags); - int end = parcel.dataPosition(); - parcel.setDataPosition(before); - parcel.writeInt(end - start); - parcel.setDataPosition(end); - } - - public static void write(Parcel parcel, int position, T[] val, int flags, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeInt(val.length); - for (T t : val) { - if (t == null) { - parcel.writeInt(0); - } else { - writeArrayPart(parcel, t, flags); - } - } - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, Parcel val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.appendFrom(val, 0, val.dataSize()); - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, List val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeList(val); - writeEnd(parcel, start); - } - } - - public static void write(Parcel parcel, int position, IBinder val, boolean mayNull) { - if (val == null) { - if (mayNull) { - writeStart(parcel, position, 0); - } - } else { - int start = writeStart(parcel, position); - parcel.writeStrongBinder(val); - writeEnd(parcel, start); - } - } - -} diff --git a/src/com/google/android/gms/dynamic/IObjectWrapper.aidl b/src/com/google/android/gms/dynamic/IObjectWrapper.aidl deleted file mode 100644 index 977456f3..00000000 --- a/src/com/google/android/gms/dynamic/IObjectWrapper.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.dynamic; - -interface IObjectWrapper { -} diff --git a/src/com/google/android/gms/dynamic/ObjectWrapper.java b/src/com/google/android/gms/dynamic/ObjectWrapper.java deleted file mode 100644 index 6a99016c..00000000 --- a/src/com/google/android/gms/dynamic/ObjectWrapper.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.dynamic; - -import android.os.IBinder; -import android.view.View; - -import java.lang.reflect.Field; - -public class ObjectWrapper extends IObjectWrapper.Stub { - private final T t; - - public ObjectWrapper(T t) { - this.t = t; - } - - public static Object unwrap(IObjectWrapper obj) { - if (obj == null) { - return null; - } - if (obj instanceof ObjectWrapper) { - return ((ObjectWrapper) obj).t; - } - IBinder binder = obj.asBinder(); - Field[] fields = binder.getClass().getDeclaredFields(); - if (fields.length != 1) { - throw new IllegalArgumentException("The concrete class implementing IObjectWrapper must have exactly *one* declared private field for the wrapped object. Preferably, this is an instance of the ObjectWrapper class."); - } - Field field = fields[0]; - if (!field.isAccessible()) { - field.setAccessible(true); - try { - Object wrapped = field.get(binder); - return wrapped; - } catch (NullPointerException localNullPointerException) { - throw new IllegalArgumentException("Binder object is null.", localNullPointerException); - } catch (IllegalArgumentException localIllegalArgumentException) { - throw new IllegalArgumentException("remoteBinder is the wrong class.", localIllegalArgumentException); - } catch (IllegalAccessException localIllegalAccessException) { - throw new IllegalArgumentException("Could not access the field in remoteBinder.", localIllegalAccessException); - } - } else { - throw new IllegalArgumentException("The concrete class implementing IObjectWrapper must have exactly one declared *private* field for the wrapped object. Preferably, this is an instance of the ObjectWrapper class."); - } - } - - public static ObjectWrapper wrap(T t) { - return new ObjectWrapper(t); - } -} \ No newline at end of file diff --git a/src/com/google/android/gms/location/Geofence.aidl b/src/com/google/android/gms/location/Geofence.aidl deleted file mode 100644 index 4fc554eb..00000000 --- a/src/com/google/android/gms/location/Geofence.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.location; - -parcelable Geofence; \ No newline at end of file diff --git a/src/com/google/android/gms/location/Geofence.java b/src/com/google/android/gms/location/Geofence.java deleted file mode 100644 index 517003a3..00000000 --- a/src/com/google/android/gms/location/Geofence.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.location; - -import android.os.Parcel; -import com.google.android.gms.common.safeparcel.SafeParcelable; - -public class Geofence implements SafeParcelable{ - - public static Creator CREATOR = new Creator() { - @Override - public Geofence createFromParcel(Parcel source) { - return new Geofence(); - } - - @Override - public Geofence[] newArray(int size) { - return new Geofence[size]; - } - }; - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - - } -} diff --git a/src/com/google/android/gms/location/internal/IGeofencerCallbacks.aidl b/src/com/google/android/gms/location/internal/IGeofencerCallbacks.aidl deleted file mode 100644 index b8e03066..00000000 --- a/src/com/google/android/gms/location/internal/IGeofencerCallbacks.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.location.internal; - -interface IGeofencerCallbacks { -} diff --git a/src/com/google/android/gms/location/internal/IGoogleLocationManagerService.aidl b/src/com/google/android/gms/location/internal/IGoogleLocationManagerService.aidl deleted file mode 100644 index 4c34b736..00000000 --- a/src/com/google/android/gms/location/internal/IGoogleLocationManagerService.aidl +++ /dev/null @@ -1,8 +0,0 @@ -package com.google.android.gms.location.internal; - -import com.google.android.gms.location.Geofence; -import com.google.android.gms.location.internal.IGeofencerCallbacks; - -interface IGoogleLocationManagerService { - void addGeofences(in List geofences, in PendingIntent pendingIntent, IGeofencerCallbacks callback, String str); -} diff --git a/src/com/google/android/gms/maps/GoogleMapOptions.aidl b/src/com/google/android/gms/maps/GoogleMapOptions.aidl deleted file mode 100644 index e2cf4afd..00000000 --- a/src/com/google/android/gms/maps/GoogleMapOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps; - -parcelable GoogleMapOptions; diff --git a/src/com/google/android/gms/maps/GoogleMapOptions.java b/src/com/google/android/gms/maps/GoogleMapOptions.java deleted file mode 100644 index cdb64a71..00000000 --- a/src/com/google/android/gms/maps/GoogleMapOptions.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps; - -import android.os.Parcel; -import com.google.android.gms.common.safeparcel.SafeParcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; -import com.google.android.gms.maps.model.CameraPosition; - -public class GoogleMapOptions implements SafeParcelable { - private int versionCode; - private int zOrderOnTop; - private boolean useViewLifecycleInFragment; - private int mapType; - private CameraPosition camera; - private boolean zoomControlsEnabled; - private boolean compassEnabled; - private boolean scrollGesturesEnabled; - private boolean zoomGesturesEnabled; - private boolean tiltGesturesEnabled; - private boolean rotateGesturesEnabled; - - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int start = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, zOrderOnTop); - SafeWriter.write(dest, 3, useViewLifecycleInFragment); - SafeWriter.write(dest, 4, mapType); - SafeWriter.write(dest, 5, camera, flags, false); - SafeWriter.write(dest, 6, zoomControlsEnabled); - SafeWriter.write(dest, 7, compassEnabled); - SafeWriter.write(dest, 8, scrollGesturesEnabled); - SafeWriter.write(dest, 9, zoomGesturesEnabled); - SafeWriter.write(dest, 10, tiltGesturesEnabled); - SafeWriter.write(dest, 11, rotateGesturesEnabled); - SafeWriter.writeEnd(dest, start); - } - - public GoogleMapOptions() { - } - - private GoogleMapOptions(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - versionCode = SafeReader.readInt(in, position); - break; - case 2: - zOrderOnTop = SafeReader.readInt(in, position); - break; - case 3: - useViewLifecycleInFragment = SafeReader.readBool(in, position); - break; - case 4: - mapType = SafeReader.readInt(in, position); - break; - case 5: - camera = SafeReader.readParcelable(in, position, CameraPosition.CREATOR); - break; - case 6: - zoomControlsEnabled = SafeReader.readBool(in, position); - break; - case 7: - compassEnabled = SafeReader.readBool(in, position); - break; - case 8: - scrollGesturesEnabled = SafeReader.readBool(in, position); - break; - case 9: - zoomGesturesEnabled = SafeReader.readBool(in, position); - break; - case 10: - tiltGesturesEnabled = SafeReader.readBool(in, position); - break; - case 11: - rotateGesturesEnabled = SafeReader.readBool(in, position); - break; - default: - SafeReader.skip(in, position); - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - public int getMapType() { - return mapType; - } - - public CameraPosition getCamera() { - return camera; - } - - public boolean isZoomControlsEnabled() { - return zoomControlsEnabled; - } - - public boolean isCompassEnabled() { - return compassEnabled; - } - - public boolean isScrollGesturesEnabled() { - return scrollGesturesEnabled; - } - - public boolean isZoomGesturesEnabled() { - return zoomGesturesEnabled; - } - - public boolean isTiltGesturesEnabled() { - return tiltGesturesEnabled; - } - - public boolean isRotateGesturesEnabled() { - return rotateGesturesEnabled; - } - - public static Creator CREATOR = new Creator() { - public GoogleMapOptions createFromParcel(Parcel source) { - return new GoogleMapOptions(source); - } - - public GoogleMapOptions[] newArray(int size) { - return new GoogleMapOptions[size]; - } - }; -} diff --git a/src/com/google/android/gms/maps/internal/ICameraUpdateFactoryDelegate.aidl b/src/com/google/android/gms/maps/internal/ICameraUpdateFactoryDelegate.aidl deleted file mode 100644 index 3076b29f..00000000 --- a/src/com/google/android/gms/maps/internal/ICameraUpdateFactoryDelegate.aidl +++ /dev/null @@ -1,20 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.model.CameraPosition; -import com.google.android.gms.maps.model.LatLng; -import com.google.android.gms.maps.model.LatLngBounds; - -interface ICameraUpdateFactoryDelegate { - IObjectWrapper zoomIn(); - IObjectWrapper zoomOut(); - IObjectWrapper scrollBy(float x, float y); - IObjectWrapper zoomTo(float zoom); - IObjectWrapper zoomBy(float zoomDelta); - IObjectWrapper zoomByWithFocus(float zoomDelta, int x, int y); - IObjectWrapper newCameraPosition(in CameraPosition cameraPosition); - IObjectWrapper newLatLng(in LatLng latLng); - IObjectWrapper newLatLngZoom(in LatLng latLng, float zoom); - IObjectWrapper newLatLngBounds(in LatLngBounds bounds, int i); - IObjectWrapper newLatLngBoundsWithSize(in LatLngBounds bounds, int i1, int i2, int i3); -} diff --git a/src/com/google/android/gms/maps/internal/ICancelableCallback.aidl b/src/com/google/android/gms/maps/internal/ICancelableCallback.aidl deleted file mode 100644 index 23182891..00000000 --- a/src/com/google/android/gms/maps/internal/ICancelableCallback.aidl +++ /dev/null @@ -1,6 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface ICancelableCallback { - void onFinish(); - void onCancel(); -} diff --git a/src/com/google/android/gms/maps/internal/ICreator.aidl b/src/com/google/android/gms/maps/internal/ICreator.aidl deleted file mode 100644 index c3c6d454..00000000 --- a/src/com/google/android/gms/maps/internal/ICreator.aidl +++ /dev/null @@ -1,17 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.GoogleMapOptions; -import com.google.android.gms.maps.internal.IMapFragmentDelegate; -import com.google.android.gms.maps.internal.IMapViewDelegate; -import com.google.android.gms.maps.internal.ICameraUpdateFactoryDelegate; -import com.google.android.gms.maps.model.internal.IBitmapDescriptorFactoryDelegate; - -interface ICreator { - void init(IObjectWrapper resources); - IMapFragmentDelegate newMapFragmentDelegate(IObjectWrapper activity); - IMapViewDelegate newMapViewDelegate(IObjectWrapper context, in GoogleMapOptions options); - ICameraUpdateFactoryDelegate newCameraUpdateFactoryDelegate(); - IBitmapDescriptorFactoryDelegate newBitmapDescriptorFactoryDelegate(); - void initV2(IObjectWrapper resources, int flags); -} diff --git a/src/com/google/android/gms/maps/internal/IGoogleMapDelegate.aidl b/src/com/google/android/gms/maps/internal/IGoogleMapDelegate.aidl deleted file mode 100644 index 1602d317..00000000 --- a/src/com/google/android/gms/maps/internal/IGoogleMapDelegate.aidl +++ /dev/null @@ -1,91 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.model.CameraPosition; -import com.google.android.gms.maps.internal.ICancelableCallback; -import com.google.android.gms.maps.internal.ILocationSourceDelegate; -import com.google.android.gms.maps.internal.IUiSettingsDelegate; -import com.google.android.gms.maps.internal.IProjectionDelegate; -import com.google.android.gms.maps.internal.IOnCameraChangeListener; -import com.google.android.gms.maps.internal.IOnMapClickListener; -import com.google.android.gms.maps.internal.IOnMapLongClickListener; -import com.google.android.gms.maps.internal.IOnMarkerClickListener; -import com.google.android.gms.maps.internal.IOnMarkerDragListener; -import com.google.android.gms.maps.internal.IOnInfoWindowClickListener; -import com.google.android.gms.maps.internal.IInfoWindowAdapter; -import com.google.android.gms.maps.internal.IOnMapLoadedCallback; -import com.google.android.gms.maps.internal.IOnMyLocationChangeListener; -import com.google.android.gms.maps.internal.IOnMyLocationButtonClickListener; -import com.google.android.gms.maps.internal.ISnapshotReadyCallback; -import com.google.android.gms.maps.model.CircleOptions; -import com.google.android.gms.maps.model.GroundOverlayOptions; -import com.google.android.gms.maps.model.MarkerOptions; -import com.google.android.gms.maps.model.PolygonOptions; -import com.google.android.gms.maps.model.PolylineOptions; -import com.google.android.gms.maps.model.TileOverlayOptions; -import com.google.android.gms.maps.model.internal.IPolylineDelegate; -import com.google.android.gms.maps.model.internal.IPolygonDelegate; -import com.google.android.gms.maps.model.internal.IMarkerDelegate; -import com.google.android.gms.maps.model.internal.ICircleDelegate; -import com.google.android.gms.maps.model.internal.IGroundOverlayDelegate; -import com.google.android.gms.maps.model.internal.ITileOverlayDelegate; - -interface IGoogleMapDelegate { - CameraPosition getCameraPosition(); - - float getMaxZoomLevel(); - float getMinZoomLevel(); - - void moveCamera(IObjectWrapper cameraUpdate); - void animateCamera(IObjectWrapper cameraUpdate); - void animateCameraWithCallback(IObjectWrapper cameraUpdate, ICancelableCallback callback); - void animateCameraWithDurationAndCallback(IObjectWrapper cameraUpdate, int duration, ICancelableCallback callback); - void stopAnimation(); - - IPolylineDelegate addPolyline(in PolylineOptions options); - IPolygonDelegate addPolygon(in PolygonOptions options); - IMarkerDelegate addMarker(in MarkerOptions options); - IGroundOverlayDelegate addGroundOverlay(in GroundOverlayOptions options); - ITileOverlayDelegate addTileOverlay(in TileOverlayOptions options); - - void clear(); - - int getMapType(); - void setMapType(int type); - boolean isTrafficEnabled(); - void setTrafficEnabled(boolean traffic); - boolean isIndoorEnabled(); - void setIndoorEnabled(boolean indoor); - - boolean isMyLocationEnabled(); - void setMyLocationEnabled(boolean myLocation); - Location getMyLocation(); - void setLocationSource(ILocationSourceDelegate locationSource); - - IUiSettingsDelegate getUiSettings(); - IProjectionDelegate getProjection(); - - void setOnCameraChangeListener(IOnCameraChangeListener listener); - void setOnMapClickListener(IOnMapClickListener listener); - void setOnMapLongClickListener(IOnMapLongClickListener listener); - void setOnMarkerClickListener(IOnMarkerClickListener listener); - void setOnMarkerDragListener(IOnMarkerDragListener listener); - void setOnInfoWindowClickListener(IOnInfoWindowClickListener listener); - void setInfoWindowAdapter(IInfoWindowAdapter adapter); - - IObjectWrapper getTestingHelper(); - - ICircleDelegate addCircle(in CircleOptions options); - - void setOnMyLocationChangeListener(IOnMyLocationChangeListener listener); - void setOnMyLocationButtonClickListener(IOnMyLocationButtonClickListener listener); - - void snapshot(ISnapshotReadyCallback callback, IObjectWrapper bitmap); - - void setPadding(int left, int top, int right, int bottom); - - boolean isBuildingsEnabled(); - void setBuildingsEnabled(boolean buildings); - - void setOnMapLoadedCallback(IOnMapLoadedCallback callback); -} diff --git a/src/com/google/android/gms/maps/internal/IInfoWindowAdapter.aidl b/src/com/google/android/gms/maps/internal/IInfoWindowAdapter.aidl deleted file mode 100644 index 28c2d91d..00000000 --- a/src/com/google/android/gms/maps/internal/IInfoWindowAdapter.aidl +++ /dev/null @@ -1,9 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.model.internal.IMarkerDelegate; - -interface IInfoWindowAdapter { - IObjectWrapper getInfoWindow(IMarkerDelegate marker); - IObjectWrapper getInfoContents(IMarkerDelegate marker); -} diff --git a/src/com/google/android/gms/maps/internal/ILocationSourceDelegate.aidl b/src/com/google/android/gms/maps/internal/ILocationSourceDelegate.aidl deleted file mode 100644 index 203ec69f..00000000 --- a/src/com/google/android/gms/maps/internal/ILocationSourceDelegate.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface ILocationSourceDelegate { -} diff --git a/src/com/google/android/gms/maps/internal/IMapFragmentDelegate.aidl b/src/com/google/android/gms/maps/internal/IMapFragmentDelegate.aidl deleted file mode 100644 index c7b0b4a1..00000000 --- a/src/com/google/android/gms/maps/internal/IMapFragmentDelegate.aidl +++ /dev/null @@ -1,19 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.maps.internal.IGoogleMapDelegate; -import com.google.android.gms.maps.GoogleMapOptions; -import com.google.android.gms.dynamic.IObjectWrapper; - -interface IMapFragmentDelegate { - IGoogleMapDelegate getMap(); - void onInflate(IObjectWrapper activity, in GoogleMapOptions options, in Bundle savedInstanceState); - void onCreate(in Bundle savedInstanceState); - IObjectWrapper onCreateView(IObjectWrapper layoutInflate, IObjectWrapper container, in Bundle savedInstanceState); - void onResume(); - void onPause(); - void onDestroyView(); - void onDestroy(); - void onLowMemory(); - void onSaveInstanceState(inout Bundle outState); - boolean isReady(); -} diff --git a/src/com/google/android/gms/maps/internal/IMapViewDelegate.aidl b/src/com/google/android/gms/maps/internal/IMapViewDelegate.aidl deleted file mode 100644 index 317587c6..00000000 --- a/src/com/google/android/gms/maps/internal/IMapViewDelegate.aidl +++ /dev/null @@ -1,15 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.maps.internal.IGoogleMapDelegate; -import com.google.android.gms.dynamic.IObjectWrapper; - -interface IMapViewDelegate { - IGoogleMapDelegate getMap(); - void onCreate(in Bundle savedInstanceState); - void onResume(); - void onPause(); - void onDestroy(); - void onLowMemory(); - void onSaveInstanceState(inout Bundle outState); - IObjectWrapper getView(); -} diff --git a/src/com/google/android/gms/maps/internal/IOnCameraChangeListener.aidl b/src/com/google/android/gms/maps/internal/IOnCameraChangeListener.aidl deleted file mode 100644 index 41010aa0..00000000 --- a/src/com/google/android/gms/maps/internal/IOnCameraChangeListener.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface IOnCameraChangeListener { -} diff --git a/src/com/google/android/gms/maps/internal/IOnInfoWindowClickListener.aidl b/src/com/google/android/gms/maps/internal/IOnInfoWindowClickListener.aidl deleted file mode 100644 index b9301030..00000000 --- a/src/com/google/android/gms/maps/internal/IOnInfoWindowClickListener.aidl +++ /dev/null @@ -1,7 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.maps.model.internal.IMarkerDelegate; - -interface IOnInfoWindowClickListener { - void onInfoWindowClick(IMarkerDelegate marker); -} diff --git a/src/com/google/android/gms/maps/internal/IOnMapClickListener.aidl b/src/com/google/android/gms/maps/internal/IOnMapClickListener.aidl deleted file mode 100644 index 5ad6bf73..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMapClickListener.aidl +++ /dev/null @@ -1,7 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.maps.model.LatLng; - -interface IOnMapClickListener { - void onMapClick(in LatLng latLng); -} diff --git a/src/com/google/android/gms/maps/internal/IOnMapLoadedCallback.aidl b/src/com/google/android/gms/maps/internal/IOnMapLoadedCallback.aidl deleted file mode 100644 index 969d9652..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMapLoadedCallback.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface IOnMapLoadedCallback { -} diff --git a/src/com/google/android/gms/maps/internal/IOnMapLongClickListener.aidl b/src/com/google/android/gms/maps/internal/IOnMapLongClickListener.aidl deleted file mode 100644 index 230a4996..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMapLongClickListener.aidl +++ /dev/null @@ -1,7 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.maps.model.LatLng; - -interface IOnMapLongClickListener { - void onMapLongClick(in LatLng latLng); -} diff --git a/src/com/google/android/gms/maps/internal/IOnMarkerClickListener.aidl b/src/com/google/android/gms/maps/internal/IOnMarkerClickListener.aidl deleted file mode 100644 index d77a0bec..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMarkerClickListener.aidl +++ /dev/null @@ -1,7 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.maps.model.internal.IMarkerDelegate; - -interface IOnMarkerClickListener { - boolean onMarkerClick(IMarkerDelegate marker); -} diff --git a/src/com/google/android/gms/maps/internal/IOnMarkerDragListener.aidl b/src/com/google/android/gms/maps/internal/IOnMarkerDragListener.aidl deleted file mode 100644 index 42cec6ca..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMarkerDragListener.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface IOnMarkerDragListener { -} diff --git a/src/com/google/android/gms/maps/internal/IOnMyLocationButtonClickListener.aidl b/src/com/google/android/gms/maps/internal/IOnMyLocationButtonClickListener.aidl deleted file mode 100644 index b10880dd..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMyLocationButtonClickListener.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface IOnMyLocationButtonClickListener { -} diff --git a/src/com/google/android/gms/maps/internal/IOnMyLocationChangeListener.aidl b/src/com/google/android/gms/maps/internal/IOnMyLocationChangeListener.aidl deleted file mode 100644 index db71cd63..00000000 --- a/src/com/google/android/gms/maps/internal/IOnMyLocationChangeListener.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface IOnMyLocationChangeListener { -} diff --git a/src/com/google/android/gms/maps/internal/IProjectionDelegate.aidl b/src/com/google/android/gms/maps/internal/IProjectionDelegate.aidl deleted file mode 100644 index 01616796..00000000 --- a/src/com/google/android/gms/maps/internal/IProjectionDelegate.aidl +++ /dev/null @@ -1,11 +0,0 @@ -package com.google.android.gms.maps.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.model.LatLng; -import com.google.android.gms.maps.model.VisibleRegion; - -interface IProjectionDelegate { - LatLng fromScreenLocation(IObjectWrapper obj); - IObjectWrapper toScreenLocation(in LatLng latLng); - VisibleRegion getVisibleRegion(); -} diff --git a/src/com/google/android/gms/maps/internal/ISnapshotReadyCallback.aidl b/src/com/google/android/gms/maps/internal/ISnapshotReadyCallback.aidl deleted file mode 100644 index 48a39219..00000000 --- a/src/com/google/android/gms/maps/internal/ISnapshotReadyCallback.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface ISnapshotReadyCallback { -} diff --git a/src/com/google/android/gms/maps/internal/IUiSettingsDelegate.aidl b/src/com/google/android/gms/maps/internal/IUiSettingsDelegate.aidl deleted file mode 100644 index 62d4edf7..00000000 --- a/src/com/google/android/gms/maps/internal/IUiSettingsDelegate.aidl +++ /dev/null @@ -1,19 +0,0 @@ -package com.google.android.gms.maps.internal; - -interface IUiSettingsDelegate { - void setZoomControlsEnabled(boolean zoom); - void setCompassEnabled(boolean compass); - void setMyLocationButtonEnabled(boolean locationButton); - void setScrollGesturesEnabled(boolean scrollGestures); - void setZoomGesturesEnabled(boolean zoomGestures); - void setTiltGesturesEnabled(boolean tiltGestures); - void setRotateGesturesEnabled(boolean rotateGestures); - void setAllGesturesEnabled(boolean gestures); - boolean isZoomControlsEnabled(); - boolean isCompassEnabled(); - boolean isMyLocationButtonEnabled(); - boolean isScrollGesturesEnabled(); - boolean isZoomGesturesEnabled(); - boolean isTiltGesturesEnabled(); - boolean isRotateGesturesEnabled(); -} diff --git a/src/com/google/android/gms/maps/model/CameraPosition.aidl b/src/com/google/android/gms/maps/model/CameraPosition.aidl deleted file mode 100644 index bb5ab701..00000000 --- a/src/com/google/android/gms/maps/model/CameraPosition.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable CameraPosition; diff --git a/src/com/google/android/gms/maps/model/CameraPosition.java b/src/com/google/android/gms/maps/model/CameraPosition.java deleted file mode 100644 index d1c2f9a5..00000000 --- a/src/com/google/android/gms/maps/model/CameraPosition.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import com.google.android.gms.common.safeparcel.SafeParcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; - -import java.util.Arrays; - -public class CameraPosition implements SafeParcelable { - public static Creator CREATOR = new Creator() { - public CameraPosition createFromParcel(Parcel source) { - return new CameraPosition(source); - } - - public CameraPosition[] newArray(int size) { - return new CameraPosition[size]; - } - }; - private int versionCode; - public LatLng target; - public float zoom; - public float tilt; - public float bearing; - - private CameraPosition(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - versionCode = SafeReader.readInt(in, position); - break; - case 2: - target = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 3: - zoom = SafeReader.readFloat(in, position); - break; - case 4: - tilt = SafeReader.readFloat(in, position); - break; - case 5: - bearing = SafeReader.readFloat(in, position); - break; - default: - SafeReader.skip(in, position); - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - public CameraPosition(int versionCode, LatLng target, float zoom, float tilt, float bearing) { - this.versionCode = versionCode; - if (target == null) { - throw new NullPointerException("null camera target"); - } - this.target = target; - this.zoom = zoom; - if (tilt < 0 || 90 < tilt) { - throw new IllegalArgumentException("Tilt needs to be between 0 and 90 inclusive"); - } - this.tilt = tilt; - if (bearing <= 0) { - bearing += 360; - } - this.bearing = bearing % 360; - } - - public CameraPosition(LatLng target, float zoom, float tilt, float bearing) { - this(1, target, zoom, tilt, bearing); - } - - @Override - public int hashCode() { - return Arrays.hashCode(new Object[]{target, zoom, tilt, bearing}); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int i = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, target, flags, false); - SafeWriter.write(dest, 3, zoom); - SafeWriter.write(dest, 4, tilt); - SafeWriter.write(dest, 5, bearing); - SafeWriter.writeEnd(dest, i); - } - - public static CameraPosition create(LatLng latLng) { - return new CameraPosition(latLng, 0, 0, 0); - } -} diff --git a/src/com/google/android/gms/maps/model/CircleOptions.aidl b/src/com/google/android/gms/maps/model/CircleOptions.aidl deleted file mode 100644 index 33ae4542..00000000 --- a/src/com/google/android/gms/maps/model/CircleOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable CircleOptions; diff --git a/src/com/google/android/gms/maps/model/CircleOptions.java b/src/com/google/android/gms/maps/model/CircleOptions.java deleted file mode 100644 index fb0c65ad..00000000 --- a/src/com/google/android/gms/maps/model/CircleOptions.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import android.os.Parcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; - -public class CircleOptions implements Parcelable { - public static Creator CREATOR = new Creator() { - public CircleOptions createFromParcel(Parcel source) { - return new CircleOptions(source); - } - - public CircleOptions[] newArray(int size) { - return new CircleOptions[size]; - } - }; - private int versionCode; - private LatLng center; - private double radius; - private float strokeWidth; - private int strokeColor; - private int fillColor; - private float zIndex; - private boolean visisble; - - public CircleOptions() { - } - - private CircleOptions(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - versionCode = SafeReader.readInt(in, position); - break; - case 2: - center = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 3: - radius = SafeReader.readDouble(in, position); - break; - case 4: - strokeWidth = SafeReader.readFloat(in, position); - break; - case 5: - strokeColor = SafeReader.readInt(in, position); - break; - case 6: - fillColor = SafeReader.readInt(in, position); - break; - case 7: - zIndex = SafeReader.readFloat(in, position); - break; - case 8: - visisble = SafeReader.readBool(in, position); - break; - default: - SafeReader.skip(in, position); - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int start = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, center, flags, false); - SafeWriter.write(dest, 3, radius); - SafeWriter.write(dest, 4, strokeWidth); - SafeWriter.write(dest, 5, strokeColor); - SafeWriter.write(dest, 6, fillColor); - SafeWriter.write(dest, 7, zIndex); - SafeWriter.write(dest, 8, visisble); - SafeWriter.writeEnd(dest, start); - } -} diff --git a/src/com/google/android/gms/maps/model/GroundOverlayOptions.aidl b/src/com/google/android/gms/maps/model/GroundOverlayOptions.aidl deleted file mode 100644 index 5bdbefaf..00000000 --- a/src/com/google/android/gms/maps/model/GroundOverlayOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable GroundOverlayOptions; diff --git a/src/com/google/android/gms/maps/model/GroundOverlayOptions.java b/src/com/google/android/gms/maps/model/GroundOverlayOptions.java deleted file mode 100644 index 559fb9c2..00000000 --- a/src/com/google/android/gms/maps/model/GroundOverlayOptions.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import android.os.Parcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; -import com.google.android.gms.dynamic.IObjectWrapper; -import org.microg.gms.maps.bitmap.BitmapDescriptor; - -public class GroundOverlayOptions implements Parcelable { - public static Creator CREATOR = new Creator() { - public GroundOverlayOptions createFromParcel(Parcel source) { - return new GroundOverlayOptions(source); - } - - public GroundOverlayOptions[] newArray(int size) { - return new GroundOverlayOptions[size]; - } - }; - private int versionCode; - private BitmapDescriptor wrappedImage; - private LatLng location; - private float width; - private float height; - private LatLngBounds bounds; - private float bearing; - private float zIndex; - private boolean visible; - private float transparency; - private float anchorU; - private float anchorV; - - public GroundOverlayOptions() { - } - - private GroundOverlayOptions(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - versionCode = SafeReader.readInt(in, position); - break; - case 2: - wrappedImage = new BitmapDescriptor(IObjectWrapper.Stub.asInterface(SafeReader.readBinder(in, position))); - break; - case 3: - location = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 4: - width = SafeReader.readFloat(in, position); - break; - case 5: - height = SafeReader.readFloat(in, position); - break; - case 6: - bounds = SafeReader.readParcelable(in, position, LatLngBounds.CREATOR); - break; - case 7: - bearing = SafeReader.readFloat(in, position); - break; - case 8: - zIndex = SafeReader.readFloat(in, position); - break; - case 9: - visible = SafeReader.readBool(in, position); - break; - case 10: - transparency = SafeReader.readFloat(in, position); - break; - case 11: - anchorU = SafeReader.readFloat(in, position); - break; - case 12: - anchorV = SafeReader.readFloat(in, position); - break; - default: - SafeReader.skip(in, position); - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int start = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, wrappedImage.getRemoteObject().asBinder(), false); - SafeWriter.write(dest, 3, location, flags, false); - SafeWriter.write(dest, 4, width); - SafeWriter.write(dest, 5, height); - SafeWriter.write(dest, 6, bounds, flags, false); - SafeWriter.write(dest, 7, bearing); - SafeWriter.write(dest, 8, zIndex); - SafeWriter.write(dest, 9, visible); - SafeWriter.write(dest, 10, transparency); - SafeWriter.write(dest, 11, anchorU); - SafeWriter.write(dest, 12, anchorV); - SafeWriter.writeEnd(dest, start); - } -} diff --git a/src/com/google/android/gms/maps/model/LatLng.aidl b/src/com/google/android/gms/maps/model/LatLng.aidl deleted file mode 100644 index 42df9312..00000000 --- a/src/com/google/android/gms/maps/model/LatLng.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable LatLng; diff --git a/src/com/google/android/gms/maps/model/LatLng.java b/src/com/google/android/gms/maps/model/LatLng.java deleted file mode 100644 index 9adf522d..00000000 --- a/src/com/google/android/gms/maps/model/LatLng.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import com.google.android.gms.common.safeparcel.SafeParcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; -import com.google.android.maps.GeoPoint; - -public class LatLng implements SafeParcelable { - public static Creator CREATOR = new Creator() { - public LatLng createFromParcel(Parcel source) { - return new LatLng(source); - } - - public LatLng[] newArray(int size) { - return new LatLng[size]; - } - }; - public double latitude; - public double longitude; - private int versionCode; - - public LatLng(int versionCode, double latitude, double longitude) { - this.versionCode = versionCode; - this.latitude = Math.max(-90, Math.min(90, latitude)); - if ((-180 <= longitude) && (longitude < 180)) { - this.longitude = longitude; - } else { - this.longitude = ((360 + (longitude - 180) % 360) % 360 - 180); - } - } - - private LatLng(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - versionCode = SafeReader.readInt(in, position); - break; - case 2: - latitude = SafeReader.readDouble(in, position); - break; - case 3: - longitude = SafeReader.readDouble(in, position); - break; - default: - SafeReader.skip(in, position); - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - public LatLng(double latitude, double longitude) { - this(1, latitude, longitude); - } - - public LatLng(GeoPoint geoPoint) { - this(((double) geoPoint.getLatitudeE6()) / 1E6, ((double) geoPoint.getLongitudeE6()) / 1E6); - } - - @Override - public final int hashCode() { - long lat = Double.doubleToLongBits(latitude); - int tmp = 31 + (int) (lat ^ lat >>> 32); - long lon = Double.doubleToLongBits(longitude); - return tmp * 31 + (int) (lon ^ lon >>> 32); - } - - @Override - public String toString() { - return "lat/lng: (" + latitude + "," + longitude + ")"; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int start = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, latitude); - SafeWriter.write(dest, 3, longitude); - SafeWriter.writeEnd(dest, start); - } - - public GeoPoint toGeoPoint() { - return new GeoPoint((int) (latitude * 1E6F), (int) (longitude * 1E6F)); - } -} diff --git a/src/com/google/android/gms/maps/model/LatLngBounds.aidl b/src/com/google/android/gms/maps/model/LatLngBounds.aidl deleted file mode 100644 index 70538794..00000000 --- a/src/com/google/android/gms/maps/model/LatLngBounds.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable LatLngBounds; \ No newline at end of file diff --git a/src/com/google/android/gms/maps/model/LatLngBounds.java b/src/com/google/android/gms/maps/model/LatLngBounds.java deleted file mode 100644 index e175e7d6..00000000 --- a/src/com/google/android/gms/maps/model/LatLngBounds.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import com.google.android.gms.common.safeparcel.SafeParcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; - -public class LatLngBounds implements SafeParcelable { - public static Creator CREATOR = new Creator() { - public LatLngBounds createFromParcel(Parcel source) { - return new LatLngBounds(source); - } - - public LatLngBounds[] newArray(int size) { - return new LatLngBounds[size]; - } - }; - private int versionCode; - public LatLng southWest; - public LatLng northEast; - - public LatLngBounds(int versionCode, LatLng southWest, LatLng northEast) { - this.versionCode = versionCode; - this.southWest = southWest; - this.northEast = northEast; - } - - public LatLngBounds(LatLng southWest, LatLng northEast) { - this(1, southWest, northEast); - } - - private LatLngBounds(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - versionCode = SafeReader.readInt(in, position); - break; - case 2: - southWest = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 3: - northEast = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - default: - SafeReader.skip(in, position); - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int start = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, southWest, flags, false); - SafeWriter.write(dest, 3, northEast, flags, false); - SafeWriter.writeEnd(dest, start); - } -} diff --git a/src/com/google/android/gms/maps/model/MarkerOptions.aidl b/src/com/google/android/gms/maps/model/MarkerOptions.aidl deleted file mode 100644 index dc4abbcf..00000000 --- a/src/com/google/android/gms/maps/model/MarkerOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable MarkerOptions; diff --git a/src/com/google/android/gms/maps/model/MarkerOptions.java b/src/com/google/android/gms/maps/model/MarkerOptions.java deleted file mode 100644 index d861f0ed..00000000 --- a/src/com/google/android/gms/maps/model/MarkerOptions.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.dynamic.ObjectWrapper; -import org.microg.gms.maps.bitmap.BitmapDescriptor; - -public class MarkerOptions implements Parcelable { - - private int versionCode = 1; - private LatLng position; - private String title; - private String snippet; - private BitmapDescriptor icon; - private float anchorU = 0.5F; - private float anchorV = 1F; - private boolean draggable; - private boolean visible; - private boolean flat; - private float rotation = 0F; - private float infoWindowAnchorU = 0F; - private float infoWindowAnchorV = 1F; - private float alpha = 1F; - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } - - public MarkerOptions() { - } - - private MarkerOptions(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - this.versionCode = SafeReader.readInt(in, position); - break; - case 2: - this.position = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 3: - this.title = SafeReader.readString(in, position); - break; - case 4: - this.snippet = SafeReader.readString(in, position); - break; - case 5: - IBinder icon = SafeReader.readBinder(in, position); - this.icon = icon == null ? null : new BitmapDescriptor(ObjectWrapper.asInterface(icon)); - break; - case 6: - this.anchorU = SafeReader.readFloat(in, position); - break; - case 7: - this.anchorV = SafeReader.readFloat(in, position); - break; - case 8: - this.draggable = SafeReader.readBool(in, position); - break; - case 9: - this.visible = SafeReader.readBool(in, position); - break; - case 10: - this.flat = SafeReader.readBool(in, position); - break; - case 11: - this.rotation = SafeReader.readFloat(in, position); - break; - case 12: - this.infoWindowAnchorU = SafeReader.readFloat(in, position); - break; - case 13: - this.infoWindowAnchorV = SafeReader.readFloat(in, position); - break; - case 14: - this.rotation = SafeReader.readFloat(in, position); - break; - default: - SafeReader.skip(in, position); - break; - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - public LatLng getPosition() { - return position; - } - - public String getTitle() { - return title; - } - - public String getSnippet() { - return snippet; - } - - public BitmapDescriptor getIcon() { - return icon; - } - - public float getAnchorU() { - return anchorU; - } - - public float getAnchorV() { - return anchorV; - } - - public boolean isDraggable() { - return draggable; - } - - public boolean isVisible() { - return visible; - } - - public boolean isFlat() { - return flat; - } - - public float getRotation() { - return rotation; - } - - public float getInfoWindowAnchorU() { - return infoWindowAnchorU; - } - - public float getInfoWindowAnchorV() { - return infoWindowAnchorV; - } - - public float getAlpha() { - return alpha; - } - - public static Creator CREATOR = new Creator() { - public MarkerOptions createFromParcel(Parcel source) { - return new MarkerOptions(source); - } - - public MarkerOptions[] newArray(int size) { - return new MarkerOptions[size]; - } - }; -} diff --git a/src/com/google/android/gms/maps/model/PolygonOptions.aidl b/src/com/google/android/gms/maps/model/PolygonOptions.aidl deleted file mode 100644 index adac82a0..00000000 --- a/src/com/google/android/gms/maps/model/PolygonOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable PolygonOptions; diff --git a/src/com/google/android/gms/maps/model/PolygonOptions.java b/src/com/google/android/gms/maps/model/PolygonOptions.java deleted file mode 100644 index 03e9d172..00000000 --- a/src/com/google/android/gms/maps/model/PolygonOptions.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import android.os.Parcelable; - -public class PolygonOptions implements Parcelable { - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } - - public PolygonOptions() { - } - - private PolygonOptions(Parcel in) { - } - - public static Creator CREATOR = new Creator() { - public PolygonOptions createFromParcel(Parcel source) { - return new PolygonOptions(source); - } - - public PolygonOptions[] newArray(int size) { - return new PolygonOptions[size]; - } - }; -} diff --git a/src/com/google/android/gms/maps/model/PolylineOptions.aidl b/src/com/google/android/gms/maps/model/PolylineOptions.aidl deleted file mode 100644 index 7c165891..00000000 --- a/src/com/google/android/gms/maps/model/PolylineOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable PolylineOptions; diff --git a/src/com/google/android/gms/maps/model/PolylineOptions.java b/src/com/google/android/gms/maps/model/PolylineOptions.java deleted file mode 100644 index 6984d526..00000000 --- a/src/com/google/android/gms/maps/model/PolylineOptions.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import android.os.Parcelable; - -import java.util.ArrayList; -import java.util.List; - -public class PolylineOptions implements Parcelable { - private int versionCode; - private List points; - private float width; - private int color; - private float zIndex; - private boolean visible; - private boolean geodesic; - - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - // TODO - } - - public PolylineOptions() { - } - - private PolylineOptions(Parcel in) { - // TODO - } - - public static Creator CREATOR = new Creator() { - public PolylineOptions createFromParcel(Parcel source) { - return new PolylineOptions(source); - } - - public PolylineOptions[] newArray(int size) { - return new PolylineOptions[size]; - } - }; -} diff --git a/src/com/google/android/gms/maps/model/TileOverlayOptions.aidl b/src/com/google/android/gms/maps/model/TileOverlayOptions.aidl deleted file mode 100644 index 85f5ac32..00000000 --- a/src/com/google/android/gms/maps/model/TileOverlayOptions.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable TileOverlayOptions; diff --git a/src/com/google/android/gms/maps/model/TileOverlayOptions.java b/src/com/google/android/gms/maps/model/TileOverlayOptions.java deleted file mode 100644 index a3bf26cb..00000000 --- a/src/com/google/android/gms/maps/model/TileOverlayOptions.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import android.os.Parcelable; - -public class TileOverlayOptions implements Parcelable { - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } - - public TileOverlayOptions() { - } - - private TileOverlayOptions(Parcel in) { - } - - public static Creator CREATOR = new Creator() { - public TileOverlayOptions createFromParcel(Parcel source) { - return new TileOverlayOptions(source); - } - - public TileOverlayOptions[] newArray(int size) { - return new TileOverlayOptions[size]; - } - }; -} diff --git a/src/com/google/android/gms/maps/model/VisibleRegion.aidl b/src/com/google/android/gms/maps/model/VisibleRegion.aidl deleted file mode 100644 index 09d22101..00000000 --- a/src/com/google/android/gms/maps/model/VisibleRegion.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.maps.model; - -parcelable VisibleRegion; diff --git a/src/com/google/android/gms/maps/model/VisibleRegion.java b/src/com/google/android/gms/maps/model/VisibleRegion.java deleted file mode 100644 index 685080b5..00000000 --- a/src/com/google/android/gms/maps/model/VisibleRegion.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.gms.maps.model; - -import android.os.Parcel; -import com.google.android.gms.common.safeparcel.SafeParcelable; -import com.google.android.gms.common.safeparcel.SafeReader; -import com.google.android.gms.common.safeparcel.SafeWriter; - -public class VisibleRegion implements SafeParcelable { - private int versionCode; - - private LatLng nearLeft; - private LatLng nearRight; - private LatLng farLeft; - private LatLng farRight; - private LatLngBounds bounds; - - public VisibleRegion(int versionCode, LatLng nearLeft, LatLng nearRight, LatLng farLeft, LatLng farRight, LatLngBounds bounds) { - this.versionCode = versionCode; - this.nearLeft = nearLeft; - this.nearRight = nearRight; - this.farLeft = farLeft; - this.farRight = farRight; - this.bounds = bounds; - } - - public VisibleRegion(LatLng nearLeft, LatLng nearRight, LatLng farLeft, LatLng farRight, LatLngBounds bounds) { - this(1, nearLeft, nearRight, farLeft, farRight, bounds); - } - - public VisibleRegion(Parcel in) { - int end = SafeReader.readStart(in); - while (in.dataPosition() < end) { - int position = SafeReader.readSingleInt(in); - switch (SafeReader.halfOf(position)) { - case 1: - this.versionCode = SafeReader.readInt(in, position); - break; - case 2: - this.nearLeft = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 3: - this.nearRight = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 4: - this.farLeft = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 5: - this.farRight = SafeReader.readParcelable(in, position, LatLng.CREATOR); - break; - case 6: - this.bounds = SafeReader.readParcelable(in, position, LatLngBounds.CREATOR); - break; - default: - SafeReader.skip(in, position); - break; - } - } - if (in.dataPosition() > end) { - throw new SafeReader.ReadException("Overread allowed size end=" + end, in); - } - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - int start = SafeWriter.writeStart(dest); - SafeWriter.write(dest, 1, versionCode); - SafeWriter.write(dest, 2, nearLeft, flags, false); - SafeWriter.write(dest, 3, nearRight, flags, false); - SafeWriter.write(dest, 4, farLeft, flags, false); - SafeWriter.write(dest, 5, farRight, flags, false); - SafeWriter.write(dest, 6, bounds, flags, false); - SafeWriter.writeEnd(dest, start); - } - - public static Creator CREATOR = new Creator() { - public VisibleRegion createFromParcel(Parcel source) { - return new VisibleRegion(source); - } - - public VisibleRegion[] newArray(int size) { - return new VisibleRegion[size]; - } - }; -} diff --git a/src/com/google/android/gms/maps/model/internal/IBitmapDescriptorFactoryDelegate.aidl b/src/com/google/android/gms/maps/model/internal/IBitmapDescriptorFactoryDelegate.aidl deleted file mode 100644 index dca49b60..00000000 --- a/src/com/google/android/gms/maps/model/internal/IBitmapDescriptorFactoryDelegate.aidl +++ /dev/null @@ -1,14 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -import android.graphics.Bitmap; -import com.google.android.gms.dynamic.IObjectWrapper; - -interface IBitmapDescriptorFactoryDelegate { - IObjectWrapper fromResource(int resourceId); - IObjectWrapper fromAsset(String assetName); - IObjectWrapper fromFile(String fileName); - IObjectWrapper defaultMarker(); - IObjectWrapper defaultMarkerWithHue(float hue); - IObjectWrapper fromBitmap(in Bitmap bitmap); - IObjectWrapper fromPath(String absolutePath); -} diff --git a/src/com/google/android/gms/maps/model/internal/ICircleDelegate.aidl b/src/com/google/android/gms/maps/model/internal/ICircleDelegate.aidl deleted file mode 100644 index 719d8eab..00000000 --- a/src/com/google/android/gms/maps/model/internal/ICircleDelegate.aidl +++ /dev/null @@ -1,24 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -import com.google.android.gms.maps.model.LatLng; - -interface ICircleDelegate { - void remove(); - String getId(); - void setCenter(in LatLng center); - LatLng getCenter(); - void setRadius(double radius); - double getRadius(); - void setStrokeWidth(float width); - float getStrokeWidth(); - void setStrokeColor(int color); - int getStrokeColor(); - void setFillColor(int color); - int getFillColor(); - void setZIndex(float zIndex); - float getZIndex(); - void setVisible(boolean visible); - boolean isVisible(); - boolean equalsRemote(ICircleDelegate other); - int hashCodeRemote(); -} diff --git a/src/com/google/android/gms/maps/model/internal/IGroundOverlayDelegate.aidl b/src/com/google/android/gms/maps/model/internal/IGroundOverlayDelegate.aidl deleted file mode 100644 index 0a1a0632..00000000 --- a/src/com/google/android/gms/maps/model/internal/IGroundOverlayDelegate.aidl +++ /dev/null @@ -1,29 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.model.LatLng; -import com.google.android.gms.maps.model.LatLngBounds; - -interface IGroundOverlayDelegate { - void remove(); - String getId(); - void setPosition(in LatLng pos); - LatLng getPosition(); - void setDimension(float dimension); - void setDimensions(float width, float height); - float getWidth(); - float getHeight(); - void setPositionFromBounds(in LatLngBounds bounds); - LatLngBounds getBounds(); - void setBearing(float bearing); - float getBearing(); - void setZIndex(float zIndex); - float getZIndex(); - void setVisible(boolean visible); - boolean isVisible(); - void setTransparency(float transparency); - float getTransparency(); - boolean equalsRemote(IGroundOverlayDelegate other); - int hashCodeRemote(); - void todo(IObjectWrapper obj); -} diff --git a/src/com/google/android/gms/maps/model/internal/IMarkerDelegate.aidl b/src/com/google/android/gms/maps/model/internal/IMarkerDelegate.aidl deleted file mode 100644 index d4eccf6d..00000000 --- a/src/com/google/android/gms/maps/model/internal/IMarkerDelegate.aidl +++ /dev/null @@ -1,33 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.maps.model.LatLng; - -interface IMarkerDelegate { - void remove(); - String getId(); - void setPosition(in LatLng pos); - LatLng getPosition(); - void setTitle(String title); - String getTitle(); - void setSnippet(String snippet); - String getSnippet(); - void setDraggable(boolean drag); - boolean isDraggable(); - void showInfoWindow(); - void hideInfoWindow(); - boolean isInfoWindowShown(); - void setVisible(boolean visible); - boolean isVisible(); - boolean equalsRemote(IMarkerDelegate other); - int hashCodeRemote(); - void setIcon(IObjectWrapper obj); - void setAnchor(float x, float y); - void setFlat(boolean flat); - boolean isFlat(); - void setRotation(float rotation); - float getRotation(); - void setInfoWindowAnchor(float x, float y); - void setAlpha(float alpha); - float getAlpha(); -} diff --git a/src/com/google/android/gms/maps/model/internal/IPolygonDelegate.aidl b/src/com/google/android/gms/maps/model/internal/IPolygonDelegate.aidl deleted file mode 100644 index 67f0517b..00000000 --- a/src/com/google/android/gms/maps/model/internal/IPolygonDelegate.aidl +++ /dev/null @@ -1,27 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -import com.google.android.gms.maps.model.LatLng; - -interface IPolygonDelegate { - void remove(); - String getId(); - void setPoints(in List points); - List getPoints(); - void setHoles(in List holes); - List getHoles(); - void setStrokeWidth(float width); - float getStrokeWidth(); - void setStrokeColor(int color); - int getStrokeColor(); - void setFillColor(int color); - int getFillColor(); - void setZIndex(float zIndex); - float getZIndex(); - void setVisible(boolean visible); - boolean isVisible(); - void setGeodesic(boolean geod); - boolean isGeodesic(); - boolean equalsRemote(IPolygonDelegate other); - int hashCodeRemote(); - -} diff --git a/src/com/google/android/gms/maps/model/internal/IPolylineDelegate.aidl b/src/com/google/android/gms/maps/model/internal/IPolylineDelegate.aidl deleted file mode 100644 index ebbb336b..00000000 --- a/src/com/google/android/gms/maps/model/internal/IPolylineDelegate.aidl +++ /dev/null @@ -1,22 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -import com.google.android.gms.maps.model.LatLng; - -interface IPolylineDelegate { - void remove(); - String getId(); - void setPoints(in List points); - List getPoints(); - void setWidth(float width); - float getWidth(); - void setColor(int color); - int getColor(); - void setZIndex(float zIndex); - float getZIndex(); - void setVisible(boolean visible); - boolean isVisible(); - void setGeodesic(boolean geod); - boolean isGeodesic(); - boolean equalsRemote(IPolylineDelegate other); - int hashCodeRemote(); -} diff --git a/src/com/google/android/gms/maps/model/internal/ITileOverlayDelegate.aidl b/src/com/google/android/gms/maps/model/internal/ITileOverlayDelegate.aidl deleted file mode 100644 index 417cb024..00000000 --- a/src/com/google/android/gms/maps/model/internal/ITileOverlayDelegate.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.maps.model.internal; - -interface ITileOverlayDelegate { -} diff --git a/src/com/google/android/gms/plus/internal/IPlusOneButtonCreator.aidl b/src/com/google/android/gms/plus/internal/IPlusOneButtonCreator.aidl deleted file mode 100644 index 26ddc64b..00000000 --- a/src/com/google/android/gms/plus/internal/IPlusOneButtonCreator.aidl +++ /dev/null @@ -1,8 +0,0 @@ -package com.google.android.gms.plus.internal; - -import com.google.android.gms.dynamic.IObjectWrapper; - -interface IPlusOneButtonCreator { - IObjectWrapper create(IObjectWrapper context, int size, int annotation, String url, int activityRequestCode); - IObjectWrapper createForAccount(IObjectWrapper context, int size, int annotation, String url, String account); -} \ No newline at end of file diff --git a/src/com/google/android/location/internal/GoogleLocationManagerService.java b/src/com/google/android/location/internal/GoogleLocationManagerService.java index 66853dcb..c04405f0 100644 --- a/src/com/google/android/location/internal/GoogleLocationManagerService.java +++ b/src/com/google/android/location/internal/GoogleLocationManagerService.java @@ -26,7 +26,7 @@ import android.util.Log; import com.google.android.gms.location.Geofence; import com.google.android.gms.location.internal.IGeofencerCallbacks; import com.google.android.gms.location.internal.IGoogleLocationManagerService; -import org.microg.gms.AbstractGmsServiceBroker; +import com.google.android.gms.common.AbstractGmsServiceBroker; import com.google.android.gms.common.internal.IGmsCallbacks; import java.util.List; diff --git a/src/org/microg/gms/AbstractGmsServiceBroker.java b/src/org/microg/gms/AbstractGmsServiceBroker.java deleted file mode 100644 index c05d4452..00000000 --- a/src/org/microg/gms/AbstractGmsServiceBroker.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.microg.gms; - -import android.os.Bundle; -import android.os.IBinder; -import android.os.RemoteException; -import com.google.android.gms.common.internal.IGmsCallbacks; -import com.google.android.gms.common.internal.IGmsServiceBroker; - -public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub { - @Override - public void getPlusService(IGmsCallbacks callback, int versionCode, String packageName, String str2, String[] paramArrayOfString, String str3, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Plus service not supported"); - } - - @Override - public void getPanoramaService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Panorama service not supported"); - } - - @Override - public void getAppDataSearchService(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException { - throw new IllegalArgumentException("App Data Search service not supported"); - } - - @Override - public void getWalletService(IGmsCallbacks callback, int versionCode) throws RemoteException { - throw new IllegalArgumentException("Wallet service not supported"); - } - - @Override - public void getPeopleService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("People service not supported"); - } - - @Override - public void getReportingService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Reporting service not supported"); - } - - @Override - public void getLocationService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Location service not supported"); - } - - @Override - public void getGoogleLocationManagerService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Google Location Manager service not supported"); - } - - @Override - public void getGamesService(IGmsCallbacks callback, int versionCode, String packageName, String str2, String[] args, String str3, IBinder binder, String str4, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Games service not supported"); - } - - @Override - public void getAppStateService(IGmsCallbacks callback, int versionCode, String packageName, String str2, String[] args) throws RemoteException { - throw new IllegalArgumentException("App State service not supported"); - } - - @Override - public void getPlayLogService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Play Log service not supported"); - } - - @Override - public void getAdMobService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("AdMob service not supported"); - } - - @Override - public void getDroidGuardService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("DroidGuard service not supported"); - } - - @Override - public void getLockboxService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Lockbox service not supported"); - } - - @Override - public void getCastMirroringService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Cast Mirroring service not supported"); - } - - @Override - public void getNetworkQualityService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Network Quality service not supported"); - } - - @Override - public void getGoogleIdentityService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Google Identity service not supported"); - } - - @Override - public void getGoogleFeedbackService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Google Feedback service not supported"); - } - - @Override - public void getCastService(IGmsCallbacks callback, int versionCode, String packageName, IBinder binder, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Cast service not supported"); - } - - @Override - public void getDriveService(IGmsCallbacks callback, int versionCode, String packageName, String[] args, String str2, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Drive service not supported"); - } - - @Override - public void getLightweightAppDataSearchService(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException { - throw new IllegalArgumentException("Lightweight App Data Search service not supported"); - } - - @Override - public void getSearchAdministrationService(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException { - throw new IllegalArgumentException("Search Administration service not supported"); - } - - @Override - public void getAutoBackupService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException { - throw new IllegalArgumentException("Auto Backup service not supported"); - } - - @Override - public void getAddressService(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException { - throw new IllegalArgumentException("Address service not supported"); - } -} diff --git a/src/org/microg/gms/maps/BackendMap.java b/src/org/microg/gms/maps/BackendMap.java new file mode 100644 index 00000000..f78fce6d --- /dev/null +++ b/src/org/microg/gms/maps/BackendMap.java @@ -0,0 +1,143 @@ +package org.microg.gms.maps; + +import android.content.Context; +import android.graphics.BitmapFactory; +import android.view.View; +import com.google.android.gms.R; +import org.microg.gms.maps.bitmap.DefaultBitmapDescriptor; +import org.microg.gms.maps.camera.CameraUpdate; +import org.microg.gms.maps.markup.Markup; +import org.oscim.android.MapView; +import org.oscim.android.cache.TileCache; +import org.oscim.android.canvas.AndroidBitmap; +import org.oscim.core.MapPosition; +import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerItem; +import org.oscim.layers.marker.MarkerSymbol; +import org.oscim.layers.tile.buildings.BuildingLayer; +import org.oscim.layers.tile.vector.VectorTileLayer; +import org.oscim.layers.tile.vector.labeling.LabelLayer; +import org.oscim.map.Layers; +import org.oscim.map.Map; +import org.oscim.map.Viewport; +import org.oscim.theme.VtmThemes; +import org.oscim.tiling.source.oscimap4.OSciMap4TileSource; + +public class BackendMap { + private final Context context; + private final MapView mapView; + private final BuildingLayer buildings; + private final VectorTileLayer baseLayer; + private final OSciMap4TileSource tileSource; + private final TileCache cache; + private final ItemizedLayer items; + + public BackendMap(Context context) { + this.context = context; + mapView = new MapView(new ContextContainer(context)); + // TODO: Use a shared tile cache (provider?) + cache = new TileCache(context, null, "tile.db"); + cache.setCacheSize(512 * (1 << 10)); + tileSource = new OSciMap4TileSource(); + tileSource.setCache(cache); + baseLayer = mapView.map().setBaseMap(tileSource); + Layers layers = mapView.map().layers(); + layers.add(buildings = new BuildingLayer(mapView.map(), baseLayer)); + layers.add(new LabelLayer(mapView.map(), baseLayer)); + layers.add(items = new ItemizedLayer<>(mapView.map(), new MarkerSymbol(new AndroidBitmap(BitmapFactory + .decodeResource(ResourcesContainer.get(), R.drawable.maps_default_marker)), 0.5F, 1))); + mapView.map().setTheme(VtmThemes.DEFAULT); + } + + public void setInputListener(Map.InputListener listener) { + mapView.map().input.bind(listener); + } + + public Viewport getViewport() { + return mapView.map().viewport(); + } + + public void destroy() { + //mapView.map().destroy(); + } + + public void onResume() { + /*try { + Method onResume = MapView.class.getDeclaredMethod("onResume"); + onResume.setAccessible(true); + onResume.invoke(mapView); + } catch (Exception e) { + e.printStackTrace(); + }*/ + } + + public void onPause() { + /*try { + Method onPause = MapView.class.getDeclaredMethod("onPause"); + onPause.setAccessible(true); + onPause.invoke(mapView); + } catch (Exception e) { + e.printStackTrace(); + }*/ + } + + public MapPosition getMapPosition() { + return mapView.map().getMapPosition(); + } + + public View getView() { + return mapView; + } + + public boolean hasBuilding() { + return mapView.map().layers().contains(buildings); + } + + public void setBuildings(boolean buildingsEnabled) { + if (!hasBuilding() && buildingsEnabled) { + mapView.map().layers().add(buildings); + } else if (hasBuilding() && !buildingsEnabled) { + mapView.map().layers().remove(buildings); + } + redraw(); + } + + public void redraw() { + mapView.map().render(); + } + + public void applyCameraUpdate(CameraUpdate cameraUpdate) { + cameraUpdate.apply(mapView.map()); + } + + public void applyCameraUpdateAnimated(CameraUpdate cameraUpdate, int durationMs) { + cameraUpdate.applyAnimated(mapView.map(), durationMs); + } + + public void stopAnimation() { + mapView.map().animator().cancel(); + } + + public T add(T markup) { + items.addItem(markup.getMarkerItem(context)); + redraw(); + return markup; + } + + public void clear() { + items.removeAllItems(); + redraw(); + } + + public void remove(Markup markup) { + items.removeItem(items.getByUid(markup.getId())); + redraw(); + } + + public void update(Markup markup) { + // TODO: keep order + items.removeItem(items.getByUid(markup.getId())); + items.addItem(markup.getMarkerItem(context)); + redraw(); + } +} diff --git a/src/org/microg/gms/maps/ContextContainer.java b/src/org/microg/gms/maps/ContextContainer.java new file mode 100644 index 00000000..81c6a6f4 --- /dev/null +++ b/src/org/microg/gms/maps/ContextContainer.java @@ -0,0 +1,532 @@ +package org.microg.gms.maps; + +import android.annotation.TargetApi; +import android.content.*; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.database.DatabaseErrorHandler; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.UserHandle; +import android.view.Display; +import android.view.ViewDebug; + +import java.io.*; + +/** + * A hacked Context that allows access to gms resources but feels like the remote context for everything else. + */ +public class ContextContainer extends Context { + private Context original; + + public ContextContainer(Context original) { + this.original = original; + } + + @Override + public AssetManager getAssets() { + return ResourcesContainer.get().getAssets(); + } + + @Override + public Resources getResources() { + return ResourcesContainer.get(); + } + + @Override + public PackageManager getPackageManager() { + return original.getPackageManager(); + } + + @Override + public ContentResolver getContentResolver() { + return original.getContentResolver(); + } + + @Override + public Looper getMainLooper() { + return original.getMainLooper(); + } + + @Override + public Context getApplicationContext() { + return original.getApplicationContext(); + } + + @Override + public void setTheme(int i) { + original.setTheme(i); + } + + @Override + @ViewDebug.ExportedProperty( + deepExport = true + ) + public Resources.Theme getTheme() { + return original.getTheme(); + } + + @Override + public ClassLoader getClassLoader() { + return original.getClassLoader(); + } + + @Override + public String getPackageName() { + return original.getPackageName(); + } + + @Override + public ApplicationInfo getApplicationInfo() { + return original.getApplicationInfo(); + } + + @Override + public String getPackageResourcePath() { + return original.getPackageResourcePath(); + } + + @Override + public String getPackageCodePath() { + return original.getPackageCodePath(); + } + + @Override + public SharedPreferences getSharedPreferences(String s, int i) { + return original.getSharedPreferences(s, i); + } + + @Override + public FileInputStream openFileInput(String s) throws FileNotFoundException { + return original.openFileInput(s); + } + + @Override + public FileOutputStream openFileOutput(String s, int i) throws FileNotFoundException { + return original.openFileOutput(s, i); + } + + @Override + public boolean deleteFile(String s) { + return original.deleteFile(s); + } + + @Override + public File getFileStreamPath(String s) { + return original.getFileStreamPath(s); + } + + @Override + public File getFilesDir() { + return original.getFilesDir(); + } + + @Override + @TargetApi(21) + public File getNoBackupFilesDir() { + return original.getNoBackupFilesDir(); + } + + @Override + public File getExternalFilesDir(String s) { + return original.getExternalFilesDir(s); + } + + @Override + @TargetApi(19) + public File[] getExternalFilesDirs(String s) { + return original.getExternalFilesDirs(s); + } + + @Override + public File getObbDir() { + return original.getObbDir(); + } + + @Override + @TargetApi(19) + public File[] getObbDirs() { + return original.getObbDirs(); + } + + @Override + public File getCacheDir() { + return original.getCacheDir(); + } + + @Override + @TargetApi(21) + public File getCodeCacheDir() { + return original.getCodeCacheDir(); + } + + @Override + public File getExternalCacheDir() { + return original.getExternalCacheDir(); + } + + @Override + @TargetApi(19) + public File[] getExternalCacheDirs() { + return original.getExternalCacheDirs(); + } + + @Override + @TargetApi(21) + public File[] getExternalMediaDirs() { + return original.getExternalMediaDirs(); + } + + @Override + public String[] fileList() { + return original.fileList(); + } + + @Override + public File getDir(String s, int i) { + return original.getDir(s, i); + } + + @Override + public SQLiteDatabase openOrCreateDatabase(String s, int i, + SQLiteDatabase.CursorFactory cursorFactory) { + return original.openOrCreateDatabase(s, i, cursorFactory); + } + + @Override + public SQLiteDatabase openOrCreateDatabase(String s, int i, + SQLiteDatabase.CursorFactory cursorFactory, + DatabaseErrorHandler databaseErrorHandler) { + return original.openOrCreateDatabase(s, i, cursorFactory, databaseErrorHandler); + } + + @Override + public boolean deleteDatabase(String s) { + return original.deleteDatabase(s); + } + + @Override + public File getDatabasePath(String s) { + return original.getDatabasePath(s); + } + + @Override + public String[] databaseList() { + return original.databaseList(); + } + + @Override + @Deprecated + public Drawable getWallpaper() { + return original.getWallpaper(); + } + + @Override + @Deprecated + public Drawable peekWallpaper() { + return original.peekWallpaper(); + } + + @Override + @Deprecated + public int getWallpaperDesiredMinimumWidth() { + return original.getWallpaperDesiredMinimumWidth(); + } + + @Override + @Deprecated + public int getWallpaperDesiredMinimumHeight() { + return original.getWallpaperDesiredMinimumHeight(); + } + + @Override + @Deprecated + public void setWallpaper(Bitmap bitmap) throws IOException { + original.setWallpaper(bitmap); + } + + @Override + @Deprecated + public void setWallpaper(InputStream inputStream) throws IOException { + original.setWallpaper(inputStream); + } + + @Override + @Deprecated + public void clearWallpaper() throws IOException { + original.clearWallpaper(); + } + + @Override + public void startActivity(Intent intent) { + original.startActivity(intent); + } + + @Override + public void startActivity(Intent intent, Bundle bundle) { + original.startActivity(intent, bundle); + } + + @Override + public void startActivities(Intent[] intents) { + original.startActivities(intents); + } + + @Override + public void startActivities(Intent[] intents, Bundle bundle) { + original.startActivities(intents, bundle); + } + + @Override + public void startIntentSender(IntentSender intentSender, Intent intent, int i, int i1, int i2) + throws IntentSender.SendIntentException { + original.startIntentSender(intentSender, intent, i, i1, i2); + } + + @Override + public void startIntentSender(IntentSender intentSender, Intent intent, int i, int i1, int i2, + Bundle bundle) throws IntentSender.SendIntentException { + original.startIntentSender(intentSender, intent, i, i1, i2, bundle); + } + + @Override + public void sendBroadcast(Intent intent) { + original.sendBroadcast(intent); + } + + @Override + public void sendBroadcast(Intent intent, String s) { + original.sendBroadcast(intent, s); + } + + @Override + public void sendOrderedBroadcast(Intent intent, String s) { + original.sendOrderedBroadcast(intent, s); + } + + @Override + public void sendOrderedBroadcast(Intent intent, String s, + BroadcastReceiver broadcastReceiver, Handler handler, int i, String s1, + Bundle bundle) { + original.sendOrderedBroadcast(intent, s, broadcastReceiver, handler, i, s1, bundle); + } + + @Override + @TargetApi(17) + public void sendBroadcastAsUser(Intent intent, UserHandle userHandle) { + original.sendBroadcastAsUser(intent, userHandle); + } + + @Override + @TargetApi(17) + public void sendBroadcastAsUser(Intent intent, UserHandle userHandle, String s) { + original.sendBroadcastAsUser(intent, userHandle, s); + } + + @Override + @TargetApi(17) + public void sendOrderedBroadcastAsUser(Intent intent, UserHandle userHandle, String s, + BroadcastReceiver broadcastReceiver, Handler handler, int i, String s1, + Bundle bundle) { + original.sendOrderedBroadcastAsUser(intent, userHandle, s, broadcastReceiver, handler, i, + s1, + bundle); + } + + @Override + @Deprecated + public void sendStickyBroadcast(Intent intent) { + original.sendStickyBroadcast(intent); + } + + @Override + @Deprecated + public void sendStickyOrderedBroadcast(Intent intent, + BroadcastReceiver broadcastReceiver, Handler handler, int i, String s, + Bundle bundle) { + original.sendStickyOrderedBroadcast(intent, broadcastReceiver, handler, i, s, bundle); + } + + @Override + @Deprecated + public void removeStickyBroadcast(Intent intent) { + original.removeStickyBroadcast(intent); + } + + @Override + @Deprecated + @TargetApi(17) + public void sendStickyBroadcastAsUser(Intent intent, UserHandle userHandle) { + original.sendStickyBroadcastAsUser(intent, userHandle); + } + + @Override + @Deprecated + @TargetApi(17) + public void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle userHandle, + BroadcastReceiver broadcastReceiver, Handler handler, int i, String s, + Bundle bundle) { + original.sendStickyOrderedBroadcastAsUser(intent, userHandle, broadcastReceiver, handler, i, + s, + bundle); + } + + @Override + @Deprecated + @TargetApi(17) + public void removeStickyBroadcastAsUser(Intent intent, UserHandle userHandle) { + original.removeStickyBroadcastAsUser(intent, userHandle); + } + + @Override + public Intent registerReceiver(BroadcastReceiver broadcastReceiver, + IntentFilter intentFilter) { + return original.registerReceiver(broadcastReceiver, intentFilter); + } + + @Override + public Intent registerReceiver(BroadcastReceiver broadcastReceiver, + IntentFilter intentFilter, String s, Handler handler) { + return original.registerReceiver(broadcastReceiver, intentFilter, s, handler); + } + + @Override + public void unregisterReceiver(BroadcastReceiver broadcastReceiver) { + original.unregisterReceiver(broadcastReceiver); + } + + @Override + public ComponentName startService(Intent intent) { + return original.startService(intent); + } + + @Override + public boolean stopService(Intent intent) { + return original.stopService(intent); + } + + @Override + public boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) { + return original.bindService(intent, serviceConnection, i); + } + + @Override + public void unbindService(ServiceConnection serviceConnection) { + original.unbindService(serviceConnection); + } + + @Override + public boolean startInstrumentation(ComponentName componentName, String s, Bundle bundle) { + return original.startInstrumentation(componentName, s, bundle); + } + + @Override + public Object getSystemService(String s) { + return original.getSystemService(s); + } + + @Override + public int checkPermission(String s, int i, int i1) { + return original.checkPermission(s, i, i1); + } + + @Override + public int checkCallingPermission(String s) { + return original.checkCallingPermission(s); + } + + @Override + public int checkCallingOrSelfPermission(String s) { + return original.checkCallingOrSelfPermission(s); + } + + @Override + public void enforcePermission(String s, int i, int i1, String s1) { + original.enforcePermission(s, i, i1, s1); + } + + @Override + public void enforceCallingPermission(String s, String s1) { + original.enforceCallingPermission(s, s1); + } + + @Override + public void enforceCallingOrSelfPermission(String s, String s1) { + original.enforceCallingOrSelfPermission(s, s1); + } + + @Override + public void grantUriPermission(String s, Uri uri, int i) { + original.grantUriPermission(s, uri, i); + } + + @Override + public void revokeUriPermission(Uri uri, int i) { + original.revokeUriPermission(uri, i); + } + + @Override + public int checkUriPermission(Uri uri, int i, int i1, int i2) { + return original.checkUriPermission(uri, i, i1, i2); + } + + @Override + public int checkCallingUriPermission(Uri uri, int i) { + return original.checkCallingUriPermission(uri, i); + } + + @Override + public int checkCallingOrSelfUriPermission(Uri uri, int i) { + return original.checkCallingOrSelfUriPermission(uri, i); + } + + @Override + public int checkUriPermission(Uri uri, String s, String s1, int i, int i1, int i2) { + return original.checkUriPermission(uri, s, s1, i, i1, i2); + } + + @Override + public void enforceUriPermission(Uri uri, int i, int i1, int i2, String s) { + original.enforceUriPermission(uri, i, i1, i2, s); + } + + @Override + public void enforceCallingUriPermission(Uri uri, int i, String s) { + original.enforceCallingUriPermission(uri, i, s); + } + + @Override + public void enforceCallingOrSelfUriPermission(Uri uri, int i, String s) { + original.enforceCallingOrSelfUriPermission(uri, i, s); + } + + @Override + public void enforceUriPermission(Uri uri, String s, String s1, int i, int i1, int i2, + String s2) { + original.enforceUriPermission(uri, s, s1, i, i1, i2, s2); + } + + @Override + public Context createPackageContext(String s, int i) + throws PackageManager.NameNotFoundException { + return original.createPackageContext(s, i); + } + + @Override + public Context createConfigurationContext(Configuration configuration) { + return original.createConfigurationContext(configuration); + } + + @Override + public Context createDisplayContext(Display display) { + return original.createDisplayContext(display); + } +} diff --git a/src/org/microg/gms/maps/GmsMapsTypeHelper.java b/src/org/microg/gms/maps/GmsMapsTypeHelper.java new file mode 100644 index 00000000..e63838f6 --- /dev/null +++ b/src/org/microg/gms/maps/GmsMapsTypeHelper.java @@ -0,0 +1,66 @@ +package org.microg.gms.maps; + +import com.google.android.gms.maps.model.CameraPosition; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.LatLngBounds; +import org.oscim.core.BoundingBox; +import org.oscim.core.GeoPoint; +import org.oscim.core.MapPosition; + +public class GmsMapsTypeHelper { + public static android.graphics.Point toPoint(org.oscim.core.Point in) { + return new android.graphics.Point((int) in.getX(), (int) in.getY()); + } + + public static GeoPoint fromLatLng(LatLng latLng) { + return new GeoPoint(latLng.latitude, latLng.longitude); + } + + public static LatLng toLatLng(GeoPoint geoPoint) { + return new LatLng(geoPoint.getLatitude(), geoPoint.getLongitude()); + } + + public static LatLngBounds toLatLngBounds(BoundingBox box) { + return new LatLngBounds(new LatLng(box.getMinLatitude(), box.getMinLongitude()), + new LatLng(box.getMaxLatitude(), box.getMaxLongitude())); + } + + public static org.oscim.core.Point fromPoint(android.graphics.Point point) { + return new org.oscim.core.Point(point.x, point.y); + } + + public static CameraPosition toCameraPosition(MapPosition mapPosition) { + return new CameraPosition(new LatLng(mapPosition.getLatitude(), mapPosition.getLongitude()), + toZoom(mapPosition.getScale()), mapPosition.getTilt(), + toBearing(mapPosition.getBearing())); + } + + public static MapPosition fromCameraPosition(CameraPosition cameraPosition) { + MapPosition mapPosition = new MapPosition(cameraPosition.target.latitude, + cameraPosition.target.longitude, fromZoom(cameraPosition.zoom)); + mapPosition.setTilt(cameraPosition.tilt); + mapPosition.setBearing(fromBearing(cameraPosition.bearing)); + return mapPosition; + } + + public static BoundingBox fromLatLngBounds(LatLngBounds bounds) { + return new BoundingBox(bounds.southWest.latitude, bounds.southWest.longitude, + bounds.northEast.latitude, bounds.northEast.longitude); + } + + public static float fromBearing(float bearing) { + return -bearing; + } + + public static float toBearing(float bearing) { + return -bearing; + } + + public static double fromZoom(float zoom) { + return Math.pow(2, zoom); + } + + public static float toZoom(double scale) { + return (float) (Math.log(scale) / Math.log(2)); + } +} diff --git a/src/org/microg/gms/maps/GoogleMapImpl.java b/src/org/microg/gms/maps/GoogleMapImpl.java index b2af0a39..bfbd1d48 100644 --- a/src/org/microg/gms/maps/GoogleMapImpl.java +++ b/src/org/microg/gms/maps/GoogleMapImpl.java @@ -1,601 +1,334 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package org.microg.gms.maps; -import android.app.Activity; import android.content.Context; -import android.graphics.Point; import android.location.Location; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; import android.os.RemoteException; import android.util.Log; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.widget.RelativeLayout; import com.google.android.gms.dynamic.IObjectWrapper; import com.google.android.gms.dynamic.ObjectWrapper; import com.google.android.gms.maps.GoogleMapOptions; import com.google.android.gms.maps.internal.*; import com.google.android.gms.maps.model.*; import com.google.android.gms.maps.model.internal.*; -import com.google.android.maps.MapController; -import com.google.android.maps.MapView; import org.microg.gms.maps.camera.CameraUpdate; -import org.microg.gms.maps.camera.CameraUpdateFactoryImpl; import org.microg.gms.maps.markup.*; +import org.oscim.event.Event; +import org.oscim.event.MotionEvent; +import org.oscim.map.Map; -public class GoogleMapImpl { - private static final String TAG = GoogleMapImpl.class.getName(); +public class GoogleMapImpl extends IGoogleMapDelegate.Stub + implements UiSettingsImpl.UiSettingsListener, Map.InputListener, Markup.MarkupListener { + private static final String TAG = "GoogleMapImpl"; - public static final int MAP_TYPE_NONE = 0; - public static final int MAP_TYPE_NORMAL = 1; - public static final int MAP_TYPE_SATELLITE = 2; - public static final int MAP_TYPE_TERRAIN = 3; - public static final int MAP_TYPE_HYBRID = 4; + private final GoogleMapOptions options; + private final Context context; + private final BackendMap backendMap; + private final UiSettingsImpl uiSettings; + private final ProjectionImpl projection; - private final ViewGroup view; - private final GoogleMapOptions options; - - private final Delegate delegate = new Delegate(); - private final UiSettings uiSettings = new UiSettings(); - private final Projection projection = new Projection(); - - private MapView mapView; - private Context context; - private InfoWindow infoWindow; private int markerCounter = 0; - private IOnCameraChangeListener cameraChangeListener; - private IOnMapClickListener mapClickListener; - private IOnMapLoadedCallback mapLoadedCallback; - private IOnMapLongClickListener mapLongClickListener; - private IOnMarkerClickListener markerClickListener; - private IOnMarkerDragListener markerDragListener; - private IOnInfoWindowClickListener infoWindowClickListener; - - private int mapType = 1; - private IInfoWindowAdapter infoWindowAdapter; - public GoogleMapImpl(LayoutInflater inflater, GoogleMapOptions options) { context = inflater.getContext(); - this.view = new RelativeLayout(context); - try { - mapView = (MapView) Class.forName("com.google.android.maps.MapView").getConstructor(Context.class, String.class).newInstance(context, null); - prepareMapView(); - view.addView(mapView); - } catch (Exception e) { - Log.d(TAG, "Sorry, can't create legacy MapView"); - } + backendMap = new BackendMap(context); + backendMap.setInputListener(this); + uiSettings = new UiSettingsImpl(this); + projection = new ProjectionImpl(backendMap.getViewport()); this.options = options; } - private void prepareMapView() { - mapView.getOverlays().add(new com.google.android.maps.Overlay() { - @Override - public boolean onTap(com.google.android.maps.GeoPoint p, MapView mapView) - { - Log.d(TAG, "onClick"); - IOnMapClickListener listener = mapClickListener; - if (listener != null) { - try { - listener.onMapClick(new LatLng(p)); - } catch (RemoteException e) { - Log.w(TAG, e); - } - return true; - } - return false; - } - }); - // TODO: this is actually never called - mapView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - Log.d(TAG, "onLongClick"); - IOnMapLongClickListener listener = mapLongClickListener; - if (listener != null) { - try { - // TODO: Handle LatLng right - listener.onMapLongClick(new LatLng(0, 0)); - } catch (RemoteException e) { - Log.w(TAG, e); - } - return true; - } - return false; - } - }); + public void onDestroy() { + backendMap.destroy(); } - public void onCreate(Bundle savedInstanceState) { - if (options != null) { - try { - delegate.animateCamera(new CameraUpdateFactoryImpl().newCameraPosition(options.getCamera())); - delegate.setMapType(options.getMapType()); - uiSettings.setCompassEnabled(options.isCompassEnabled()); - uiSettings.setZoomControlsEnabled(options.isZoomControlsEnabled()); - uiSettings.setRotateGesturesEnabled(options.isRotateGesturesEnabled()); - uiSettings.setScrollGesturesEnabled(options.isScrollGesturesEnabled()); - uiSettings.setTiltGesturesEnabled(options.isTiltGesturesEnabled()); - uiSettings.setZoomGesturesEnabled(options.isZoomGesturesEnabled()); - } catch (RemoteException ignored) { - // It's not remote... - } - } - if (savedInstanceState != null) { - savedInstanceState.setClassLoader(GoogleMapImpl.class.getClassLoader()); - mapView.onRestoreInstanceState(savedInstanceState); - } + public void onResume() { + backendMap.onResume(); } - public IOnMarkerClickListener getMarkerClickListener() { - return markerClickListener; + public void onPause() { + backendMap.onPause(); } - public IOnInfoWindowClickListener getInfoWindowClickListener() { - return infoWindowClickListener; + public View getView() { + return backendMap.getView(); } - public Context getContext() { - return context; + private String getNextMarkerId() { + return "m" + markerCounter++; + } + + /* + Camera + */ + + @Override + public CameraPosition getCameraPosition() throws RemoteException { + return GmsMapsTypeHelper.toCameraPosition(backendMap.getMapPosition()); } - public MapView getMapView() { - return mapView; - } - - public MapController getController() { - return mapView != null ? mapView.getController() : null; - } - - public View getView() { - return view; - } - - public IGoogleMapDelegate getDelegate() { - return delegate; - } - - public void remove(MarkerImpl marker) { - mapView.getOverlays().remove(marker.getOverlay()); - try { - if (infoWindow != null && infoWindow.getMarker().getId().equals(marker.getId())) { - hideInfoWindow(); - } - } catch (RemoteException e) { - // It's not remote... - } + @Override + public float getMaxZoomLevel() throws RemoteException { + return 0; } - public void redraw() { - mapView.postInvalidate(); - try { - Class.forName("com.google.android.maps.MapView.WrappedMapView") - .getDeclaredMethod("postInvalidate") - .invoke(MapView.class.getDeclaredMethod("getWrapped").invoke(mapView)); - } catch (Exception e) { - Log.w(TAG, "MapView does not support extended microg features", e); - } + @Override + public float getMinZoomLevel() throws RemoteException { + return 0; } - public void onSaveInstanceState(Bundle outState) { - mapView.onSaveInstanceState(outState); + @Override + public void moveCamera(IObjectWrapper cameraUpdate) throws RemoteException { + CameraUpdate camUpdate = (CameraUpdate) ObjectWrapper.unwrap(cameraUpdate); + backendMap.applyCameraUpdate(camUpdate); } - public void hideInfoWindow() { - if (infoWindow != null) { - mapView.getOverlays().remove(infoWindow); - infoWindow.destroy(); - } - infoWindow = null; + @Override + public void animateCamera(IObjectWrapper cameraUpdate) throws RemoteException { + CameraUpdate camUpdate = (CameraUpdate) ObjectWrapper.unwrap(cameraUpdate); + backendMap.applyCameraUpdateAnimated(camUpdate, 1000); } - public void showInfoWindow(final MarkerImpl marker) { - hideInfoWindow(); - InfoWindow window = new InfoWindow(context, this, marker); - if (infoWindowAdapter != null) { - try { - IObjectWrapper infoWindow = infoWindowAdapter.getInfoWindow(marker); - window.setWindow((View) ObjectWrapper.unwrap(infoWindow)); - } catch (RemoteException e) { - Log.w(TAG, e); - } - } - if (!window.isComplete()) { - if (infoWindowAdapter != null) { - try { - IObjectWrapper contents = infoWindowAdapter.getInfoContents(marker); - window.setContent((View) ObjectWrapper.unwrap(contents)); - } catch (RemoteException e) { - Log.w(TAG, e); - } - } - } - if (!window.isComplete()) { - window.buildDefault(); - } - if (window.isComplete()) { - infoWindow = window; - Log.d(TAG, "Showing info window " + infoWindow + " for marker " + marker); - mapView.getOverlays().add(infoWindow); - } + @Override + public void animateCameraWithCallback(IObjectWrapper cameraUpdate, ICancelableCallback callback) + throws RemoteException { + CameraUpdate camUpdate = (CameraUpdate) ObjectWrapper.unwrap(cameraUpdate); + backendMap.applyCameraUpdateAnimated(camUpdate, 1000); } - private void runLater(Runnable runnable) { - new Handler(Looper.getMainLooper()).post(runnable); + @Override + public void animateCameraWithDurationAndCallback(IObjectWrapper cameraUpdate, int duration, + ICancelableCallback callback) throws RemoteException { + CameraUpdate camUpdate = (CameraUpdate) ObjectWrapper.unwrap(cameraUpdate); + backendMap.applyCameraUpdateAnimated(camUpdate, duration); } - private class Delegate extends IGoogleMapDelegate.Stub { - @Override - public CameraPosition getCameraPosition() throws RemoteException { - if (mapView == null) return null; - return new CameraPosition(new LatLng(mapView.getMapCenter()), mapView.getZoomLevel(), 0, 0); - } - - @Override - public float getMaxZoomLevel() throws RemoteException { - return mapView.getMaxZoomLevel(); - } - - @Override - public float getMinZoomLevel() throws RemoteException { - return 1; - } - - @Override - public void moveCamera(final IObjectWrapper cameraUpdate) throws RemoteException { - runLater(new Runnable() { - @Override - public void run() { - ((CameraUpdate) ObjectWrapper.unwrap(cameraUpdate)).update(GoogleMapImpl.this); - } - }); - } - - @Override - public void animateCamera(final IObjectWrapper cameraUpdate) throws RemoteException { - runLater(new Runnable() { - @Override - public void run() { - ((CameraUpdate) ObjectWrapper.unwrap(cameraUpdate)).update(GoogleMapImpl.this); - } - }); - } - - @Override - public void animateCameraWithCallback(final IObjectWrapper cameraUpdate, final ICancelableCallback callback) throws RemoteException { - runLater(new Runnable() { - @Override - public void run() { - ((CameraUpdate) ObjectWrapper.unwrap(cameraUpdate)).update(GoogleMapImpl.this); - if (callback != null) try { - callback.onFinish(); - } catch (RemoteException e) { - Log.w(TAG, e); - } - } - }); - } - - @Override - public void animateCameraWithDurationAndCallback(final IObjectWrapper cameraUpdate, int duration, final ICancelableCallback callback) throws RemoteException { - runLater(new Runnable() { - @Override - public void run() { - ((CameraUpdate) ObjectWrapper.unwrap(cameraUpdate)).update(GoogleMapImpl.this); - if (callback != null) try { - callback.onFinish(); - } catch (RemoteException e) { - Log.w(TAG, e); - } - } - }); - } - - @Override - public void stopAnimation() throws RemoteException { - mapView.getController().stopAnimation(false); - } - - @Override - public IPolylineDelegate addPolyline(PolylineOptions options) throws RemoteException { - return new PolylineImpl(options); - } - - @Override - public IPolygonDelegate addPolygon(PolygonOptions options) throws RemoteException { - return new PolygonImpl(options); - } - - @Override - public IMarkerDelegate addMarker(MarkerOptions options) throws RemoteException { - MarkerImpl marker = new MarkerImpl("m" + markerCounter++, options, GoogleMapImpl.this); - if (infoWindow != null) mapView.getOverlays().remove(infoWindow); - mapView.getOverlays().add(marker.getOverlay()); - if (infoWindow != null) mapView.getOverlays().add(infoWindow); - redraw(); - return marker; - } - - @Override - public IGroundOverlayDelegate addGroundOverlay(GroundOverlayOptions options) throws RemoteException { - return new GroundOverlayImpl(options); - } - - @Override - public ITileOverlayDelegate addTileOverlay(TileOverlayOptions options) throws RemoteException { - return null; - } - - @Override - public void clear() throws RemoteException { - mapView.getOverlays().clear(); - hideInfoWindow(); - redraw(); - } - - @Override - public int getMapType() throws RemoteException { - return mapType; - } - - @Override - public void setMapType(int type) throws RemoteException { - mapType = type; - if (mapType == MAP_TYPE_SATELLITE) { - mapView.setSatellite(true); - } else { - mapView.setSatellite(false); - } - } - - @Override - public boolean isTrafficEnabled() throws RemoteException { - return false; - } - - @Override - public void setTrafficEnabled(boolean traffic) throws RemoteException { - - } - - @Override - public boolean isIndoorEnabled() throws RemoteException { - return false; - } - - @Override - public void setIndoorEnabled(boolean indoor) throws RemoteException { - - } - - @Override - public boolean isMyLocationEnabled() throws RemoteException { - return false; - } - - @Override - public void setMyLocationEnabled(boolean myLocation) throws RemoteException { - - } - - @Override - public Location getMyLocation() throws RemoteException { - return null; - } - - @Override - public void setLocationSource(ILocationSourceDelegate locationSource) throws RemoteException { - - } - - @Override - public IUiSettingsDelegate getUiSettings() throws RemoteException { - return uiSettings; - } - - @Override - public IProjectionDelegate getProjection() throws RemoteException { - return projection; - } - - @Override - public void setOnCameraChangeListener(IOnCameraChangeListener listener) throws RemoteException { - cameraChangeListener = listener; - } - - @Override - public void setOnMapClickListener(final IOnMapClickListener listener) throws RemoteException { - mapClickListener = listener; - } - - @Override - public void setOnMapLongClickListener(final IOnMapLongClickListener listener) throws RemoteException { - mapLongClickListener = listener; - } - - @Override - public void setOnMarkerClickListener(IOnMarkerClickListener listener) throws RemoteException { - markerClickListener = listener; - } - - @Override - public void setOnMarkerDragListener(IOnMarkerDragListener listener) throws RemoteException { - markerDragListener = listener; - } - - @Override - public void setOnInfoWindowClickListener(IOnInfoWindowClickListener listener) throws RemoteException { - infoWindowClickListener = listener; - } - - @Override - public void setInfoWindowAdapter(IInfoWindowAdapter adapter) throws RemoteException { - infoWindowAdapter = adapter; - } - - @Override - public IObjectWrapper getTestingHelper() throws RemoteException { - return null; - } - - @Override - public ICircleDelegate addCircle(CircleOptions options) throws RemoteException { - return new CircleImpl(options); - } - - @Override - public void setOnMyLocationChangeListener(IOnMyLocationChangeListener listener) throws RemoteException { - - } - - @Override - public void setOnMyLocationButtonClickListener(IOnMyLocationButtonClickListener listener) throws RemoteException { - - } - - @Override - public void snapshot(ISnapshotReadyCallback callback, IObjectWrapper bitmap) throws RemoteException { - - } - - @Override - public void setPadding(int left, int top, int right, int bottom) throws RemoteException { - - } - - @Override - public boolean isBuildingsEnabled() throws RemoteException { - return false; - } - - @Override - public void setBuildingsEnabled(boolean buildings) throws RemoteException { - - } - - @Override - public void setOnMapLoadedCallback(IOnMapLoadedCallback callback) throws RemoteException { - mapLoadedCallback = callback; - } + @Override + public IProjectionDelegate getProjection() throws RemoteException { + return projection; } - private class UiSettings extends IUiSettingsDelegate.Stub { + @Override + public void stopAnimation() throws RemoteException { + backendMap.stopAnimation(); + } + + /* + Markers, polylines, polygons, overlays, etc + */ - @Override - public void setZoomControlsEnabled(boolean zoom) throws RemoteException { - mapView.setBuiltInZoomControls(zoom); - } + @Override + public ICircleDelegate addCircle(CircleOptions options) throws RemoteException { + return new CircleImpl(options); // TODO + } - @Override - public void setCompassEnabled(boolean compass) throws RemoteException { - // TODO - } + @Override + public IPolylineDelegate addPolyline(PolylineOptions options) throws RemoteException { + return new PolylineImpl(options); // TODO + } - @Override - public void setMyLocationButtonEnabled(boolean locationButton) throws RemoteException { - // TODO - } + @Override + public IPolygonDelegate addPolygon(PolygonOptions options) throws RemoteException { + return new PolygonImpl(options); // TODO + } - @Override - public void setScrollGesturesEnabled(boolean scrollGestures) throws RemoteException { - // TODO - } + @Override + public IMarkerDelegate addMarker(MarkerOptions options) throws RemoteException { + return backendMap.add(new MarkerImpl(getNextMarkerId(), options, this)); + } - @Override - public void setZoomGesturesEnabled(boolean zoomGestures) throws RemoteException { - // TODO - } + @Override + public IGroundOverlayDelegate addGroundOverlay(GroundOverlayOptions options) + throws RemoteException { + return new GroundOverlayImpl(options); // TODO + } - @Override - public void setTiltGesturesEnabled(boolean tiltGestures) throws RemoteException { - // TODO - } + @Override + public ITileOverlayDelegate addTileOverlay(TileOverlayOptions options) throws RemoteException { + return new TileOverlayImpl(); // TODO + } - @Override - public void setRotateGesturesEnabled(boolean rotateGestures) throws RemoteException { - // TODO - } + @Override + public void setInfoWindowAdapter(IInfoWindowAdapter adapter) throws RemoteException { - @Override - public void setAllGesturesEnabled(boolean gestures) throws RemoteException { - // TODO - } + } - @Override - public boolean isZoomControlsEnabled() throws RemoteException { - return false; - } + @Override + public void clear() throws RemoteException { + backendMap.clear(); + } - @Override - public boolean isCompassEnabled() throws RemoteException { - return false; - } + @Override + public void update(Markup markup) { + backendMap.update(markup); + } - @Override - public boolean isMyLocationButtonEnabled() throws RemoteException { - return false; - } + @Override + public void remove(Markup markup) { + backendMap.remove(markup); + } + + /* + Map options + */ - @Override - public boolean isScrollGesturesEnabled() throws RemoteException { - return false; - } + @Override + public int getMapType() throws RemoteException { + return 0; + } - @Override - public boolean isZoomGesturesEnabled() throws RemoteException { - return false; - } + @Override + public void setMapType(int type) throws RemoteException { - @Override - public boolean isTiltGesturesEnabled() throws RemoteException { - return false; - } + } - @Override - public boolean isRotateGesturesEnabled() throws RemoteException { - return false; - } - } + @Override + public boolean isTrafficEnabled() throws RemoteException { + return false; + } - public class Projection extends IProjectionDelegate.Stub { + @Override + public void setTrafficEnabled(boolean traffic) throws RemoteException { + Log.w(TAG, "Traffic not yet supported"); + } - @Override - public IObjectWrapper toScreenLocation(LatLng latLng) throws RemoteException { - return ObjectWrapper.wrap(mapView.getProjection().toPixels(latLng.toGeoPoint(), null)); + @Override + public boolean isIndoorEnabled() throws RemoteException { + return false; + } + + @Override + public void setIndoorEnabled(boolean indoor) throws RemoteException { + Log.w(TAG, "Indoor not yet supported"); + } + + @Override + public boolean isMyLocationEnabled() throws RemoteException { + return false; + } + + @Override + public void setMyLocationEnabled(boolean myLocation) throws RemoteException { + Log.w(TAG, "MyLocation not yet supported"); + } + + @Override + public boolean isBuildingsEnabled() throws RemoteException { + return backendMap.hasBuilding(); + } + + @Override + public void setBuildingsEnabled(boolean buildingsEnabled) throws RemoteException { + backendMap.setBuildings(buildingsEnabled); + } + + /* + Ui Settings + */ + + @Override + public IUiSettingsDelegate getUiSettings() throws RemoteException { + return uiSettings; + } + + @Override + public void onUiSettingsChanged(UiSettingsImpl settings) throws RemoteException { + if (settings.isCompassEnabled()) { + Log.w(TAG, "Compass not yet supported"); } - - @Override - public LatLng fromScreenLocation(IObjectWrapper obj) throws RemoteException { - Point point = (Point) ObjectWrapper.unwrap(obj); - return new LatLng(mapView.getProjection().fromPixels(point.x, point.y)); + if (settings.isMyLocationButtonEnabled()) { + Log.w(TAG, "MyLocationButton not yet supported"); } - - @Override - public VisibleRegion getVisibleRegion() throws RemoteException { - LatLng nearLeft = new LatLng(mapView.getProjection().fromPixels(0, mapView.getHeight())); - LatLng nearRight = new LatLng(mapView.getProjection().fromPixels(mapView.getWidth(), mapView.getHeight())); - LatLng farLeft = new LatLng(mapView.getProjection().fromPixels(0, 0)); - LatLng farRight = new LatLng(mapView.getProjection().fromPixels(mapView.getWidth(), 0)); - - return new VisibleRegion(nearLeft, nearRight, farLeft, farRight, new LatLngBounds(farRight, nearLeft)); + if (settings.isZoomControlsEnabled()) { + Log.w(TAG, "ZoomControls not yet supported"); } } + + /* + Listener and callback setters + */ + + @Override + public void setOnCameraChangeListener(IOnCameraChangeListener listener) throws RemoteException { + + } + + @Override + public void setOnMapClickListener(IOnMapClickListener listener) throws RemoteException { + + } + + @Override + public void setOnMapLongClickListener(IOnMapLongClickListener listener) throws RemoteException { + + } + + @Override + public void setOnMarkerClickListener(IOnMarkerClickListener listener) throws RemoteException { + + } + + @Override + public void setOnMarkerDragListener(IOnMarkerDragListener listener) throws RemoteException { + + } + + @Override + public void setOnInfoWindowClickListener(IOnInfoWindowClickListener listener) + throws RemoteException { + + } + + @Override + public void setOnMyLocationChangeListener(IOnMyLocationChangeListener listener) + throws RemoteException { + + } + + @Override + public void setOnMyLocationButtonClickListener(IOnMyLocationButtonClickListener listener) + throws RemoteException { + + } + + @Override + public void setOnMapLoadedCallback(IOnMapLoadedCallback callback) throws RemoteException { + + } + + /* + Misc + */ + + @Override + public IObjectWrapper getTestingHelper() throws RemoteException { + return null; + } + + @Override + public void snapshot(ISnapshotReadyCallback callback, IObjectWrapper bitmap) + throws RemoteException { + + } + + @Override + public void setPadding(int left, int top, int right, int bottom) throws RemoteException { + getView().setPadding(left, top, right, bottom); + } + + @Override + public Location getMyLocation() throws RemoteException { + return null; + } + + @Override + public void setLocationSource(ILocationSourceDelegate locationSource) throws RemoteException { + + } + + @Override + public void onInputEvent(Event event, MotionEvent motionEvent) { + Log.d(TAG, "onInputEvent(" + event + ", " + motionEvent + ")"); + } } diff --git a/src/org/microg/gms/maps/MapFragmentImpl.java b/src/org/microg/gms/maps/MapFragmentImpl.java index ec5c2ed0..f2ecbc76 100644 --- a/src/org/microg/gms/maps/MapFragmentImpl.java +++ b/src/org/microg/gms/maps/MapFragmentImpl.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.RemoteException; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -31,84 +32,89 @@ import com.google.android.gms.maps.internal.IMapFragmentDelegate; public class MapFragmentImpl extends IMapFragmentDelegate.Stub { - private GoogleMapImpl map; - private GoogleMapOptions options; - private Context context; + private GoogleMapImpl map; + private GoogleMapOptions options; + private Context context; - public MapFragmentImpl(Activity activity) { - context = activity; - } + public MapFragmentImpl(Activity activity) { + context = activity; + } - private GoogleMapImpl myMap() { - if (map == null) { - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - map = new GoogleMapImpl(inflater, options); - } - return map; - } + private GoogleMapImpl myMap() { + if (map == null) { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + map = new GoogleMapImpl(inflater, options); + } + return map; + } - @Override - public IGoogleMapDelegate getMap() throws RemoteException { - return myMap().getDelegate(); - } + @Override + public IGoogleMapDelegate getMap() throws RemoteException { + return myMap(); + } - @Override - public void onInflate(IObjectWrapper activity, GoogleMapOptions options, Bundle savedInstanceState) throws RemoteException { + @Override + public void onInflate(IObjectWrapper activity, GoogleMapOptions options, + Bundle savedInstanceState) throws RemoteException { + Log.d("MapFragmentImpl", "onInflate"); + } - } + @Override + public void onCreate(Bundle savedInstanceState) throws RemoteException { + //myMap().onCreate(savedInstanceState); + Log.d("MapFragmentImpl", "onCreate"); + } - @Override - public void onCreate(Bundle savedInstanceState) throws RemoteException { - myMap().onCreate(savedInstanceState); - } + @Override + public IObjectWrapper onCreateView(IObjectWrapper layoutInflater, IObjectWrapper container, + Bundle savedInstanceState) throws RemoteException { + if (map == null) { + LayoutInflater inflater = (LayoutInflater) ObjectWrapper.unwrap(layoutInflater); + map = new GoogleMapImpl(inflater, options); + //map.onCreate(savedInstanceState); + } else { + View view = map.getView(); + if (view.getParent() instanceof ViewGroup) { + ((ViewGroup) view.getParent()).removeView(view); + } + } + return ObjectWrapper.wrap(myMap().getView()); + } - @Override - public IObjectWrapper onCreateView(IObjectWrapper layoutInflater, IObjectWrapper container, Bundle savedInstanceState) throws RemoteException { - if (map == null) { - LayoutInflater inflater = (LayoutInflater) ObjectWrapper.unwrap(layoutInflater); - map = new GoogleMapImpl(inflater, options); - map.onCreate(savedInstanceState); - } else { - View view = map.getView(); - if (view.getParent() instanceof ViewGroup) { - ((ViewGroup) view.getParent()).removeView(view); - } - } - return ObjectWrapper.wrap(myMap().getView()); - } + @Override + public void onResume() throws RemoteException { + myMap().onResume(); + } - @Override - public void onResume() throws RemoteException { + @Override + public void onPause() throws RemoteException { + myMap().onPause(); + } - } + @Override + public void onDestroyView() throws RemoteException { - @Override - public void onPause() throws RemoteException { + } - } + @Override + public void onDestroy() throws RemoteException { + myMap().onDestroy(); + } - @Override - public void onDestroyView() throws RemoteException { + @Override + public void onLowMemory() throws RemoteException { - } + } - @Override - public void onDestroy() throws RemoteException { + @Override + public void onSaveInstanceState(Bundle outState) throws RemoteException { + //myMap().onSaveInstanceState(outState); + } - } - - @Override - public void onLowMemory() throws RemoteException { - - } - - @Override - public void onSaveInstanceState(Bundle outState) throws RemoteException { - myMap().onSaveInstanceState(outState); - } - - @Override - public boolean isReady() throws RemoteException { - return false; - } + @Override + public boolean isReady() throws RemoteException { + Log.d("MapFragmentImpl", "isReady"); + return false; + } } diff --git a/src/org/microg/gms/maps/MapViewImpl.java b/src/org/microg/gms/maps/MapViewImpl.java index d2fe7416..283b2b61 100644 --- a/src/org/microg/gms/maps/MapViewImpl.java +++ b/src/org/microg/gms/maps/MapViewImpl.java @@ -19,6 +19,7 @@ package org.microg.gms.maps; import android.content.Context; import android.os.Bundle; import android.os.RemoteException; +import android.util.Log; import android.view.LayoutInflater; import com.google.android.gms.dynamic.IObjectWrapper; import com.google.android.gms.dynamic.ObjectWrapper; @@ -28,60 +29,62 @@ import com.google.android.gms.maps.internal.IMapViewDelegate; public class MapViewImpl extends IMapViewDelegate.Stub { - private GoogleMapImpl map; - private GoogleMapOptions options; - private Context context; + private GoogleMapImpl map; + private GoogleMapOptions options; + private Context context; - public MapViewImpl(Context context, GoogleMapOptions options) { - this.context = context; - this.options = options; - } + public MapViewImpl(Context context, GoogleMapOptions options) { + this.context = context; + this.options = options; + } - private GoogleMapImpl myMap() { - if (map == null) { - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - map = new GoogleMapImpl(inflater, options); - } - return map; - } + private GoogleMapImpl myMap() { + if (map == null) { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + map = new GoogleMapImpl(inflater, options); + } + return map; + } - @Override - public IGoogleMapDelegate getMap() throws RemoteException { - return myMap().getDelegate(); - } + @Override + public IGoogleMapDelegate getMap() throws RemoteException { + return myMap(); + } - @Override - public void onCreate(Bundle savedInstanceState) throws RemoteException { - myMap().onCreate(savedInstanceState); - } + @Override + public void onCreate(Bundle savedInstanceState) throws RemoteException { + //myMap().onCreate(savedInstanceState); + Log.d("MapViewImpl", "onCreate"); + } - @Override - public void onResume() throws RemoteException { + @Override + public void onResume() throws RemoteException { + myMap().onResume(); + } - } + @Override + public void onPause() throws RemoteException { + myMap().onPause(); + } - @Override - public void onPause() throws RemoteException { + @Override + public void onDestroy() throws RemoteException { + myMap().onDestroy(); + } - } + @Override + public void onLowMemory() throws RemoteException { - @Override - public void onDestroy() throws RemoteException { + } - } + @Override + public void onSaveInstanceState(Bundle outState) throws RemoteException { - @Override - public void onLowMemory() throws RemoteException { + } - } - - @Override - public void onSaveInstanceState(Bundle outState) throws RemoteException { - - } - - @Override - public IObjectWrapper getView() throws RemoteException { - return ObjectWrapper.wrap(myMap().getView()); - } + @Override + public IObjectWrapper getView() throws RemoteException { + return ObjectWrapper.wrap(myMap().getView()); + } } diff --git a/src/org/microg/gms/maps/ProjectionImpl.java b/src/org/microg/gms/maps/ProjectionImpl.java new file mode 100644 index 00000000..ec36f940 --- /dev/null +++ b/src/org/microg/gms/maps/ProjectionImpl.java @@ -0,0 +1,38 @@ +package org.microg.gms.maps; + +import android.os.RemoteException; +import com.google.android.gms.dynamic.IObjectWrapper; +import com.google.android.gms.dynamic.ObjectWrapper; +import com.google.android.gms.maps.internal.IProjectionDelegate; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.VisibleRegion; +import org.oscim.core.Point; +import org.oscim.map.Viewport; + +public class ProjectionImpl extends IProjectionDelegate.Stub { + private Viewport viewport; + + public ProjectionImpl(Viewport viewport) { + this.viewport = viewport; + } + + @Override + public LatLng fromScreenLocation(IObjectWrapper obj) throws RemoteException { + Point point = GmsMapsTypeHelper + .fromPoint((android.graphics.Point) ObjectWrapper.unwrap(obj)); + return GmsMapsTypeHelper + .toLatLng(viewport.fromScreenPoint((float) point.x, (float) point.y)); + } + + @Override + public IObjectWrapper toScreenLocation(LatLng latLng) throws RemoteException { + Point point = new Point(); + viewport.toScreenPoint(GmsMapsTypeHelper.fromLatLng(latLng), point); + return ObjectWrapper.wrap(GmsMapsTypeHelper.toPoint(point)); + } + + @Override + public VisibleRegion getVisibleRegion() throws RemoteException { + return new VisibleRegion(GmsMapsTypeHelper.toLatLngBounds(viewport.getBBox())); + } +} diff --git a/src/org/microg/gms/maps/ResourcesContainer.java b/src/org/microg/gms/maps/ResourcesContainer.java index 376dafdf..46cddb0d 100644 --- a/src/org/microg/gms/maps/ResourcesContainer.java +++ b/src/org/microg/gms/maps/ResourcesContainer.java @@ -19,15 +19,17 @@ package org.microg.gms.maps; import android.content.res.Resources; public class ResourcesContainer { - private static Resources resources; - public static void set(Resources resources) { - ResourcesContainer.resources = resources; - } - public static Resources get() { - if (resources == null) { - throw new IllegalStateException("Resources have not been initialized"); - } else { - return resources; - } - } + private static Resources resources; + + public static void set(Resources resources) { + ResourcesContainer.resources = resources; + } + + public static Resources get() { + if (resources == null) { + throw new IllegalStateException("Resources have not been initialized"); + } else { + return resources; + } + } } diff --git a/src/org/microg/gms/maps/UiSettingsImpl.java b/src/org/microg/gms/maps/UiSettingsImpl.java new file mode 100644 index 00000000..31853d6f --- /dev/null +++ b/src/org/microg/gms/maps/UiSettingsImpl.java @@ -0,0 +1,117 @@ +package org.microg.gms.maps; + +import android.os.RemoteException; +import com.google.android.gms.maps.internal.IUiSettingsDelegate; + +public class UiSettingsImpl extends IUiSettingsDelegate.Stub { + private boolean zoomControlsEnabled; + private boolean compassEnabled; + private boolean myLocationButtonEnabled; + private boolean scrollGesturesEnabled; + private boolean zoomGesturesEnabled; + private boolean tiltGesturesEnabled; + private boolean rotateGesturesEnabled; + + private UiSettingsListener listener; + + public UiSettingsImpl() { + } + + public UiSettingsImpl(UiSettingsListener listener) { + this.listener = listener; + } + + public void setListener(UiSettingsListener listener) { + this.listener = listener; + } + + @Override + public void setZoomControlsEnabled(boolean zoomControlsEnabled) throws RemoteException { + this.zoomControlsEnabled = zoomControlsEnabled; + listener.onUiSettingsChanged(this); + } + + @Override + public void setCompassEnabled(boolean compassEnabled) throws RemoteException { + this.compassEnabled = compassEnabled; + listener.onUiSettingsChanged(this); + } + + @Override + public void setMyLocationButtonEnabled(boolean myLocationButtonEnabled) throws RemoteException { + this.myLocationButtonEnabled = myLocationButtonEnabled; + listener.onUiSettingsChanged(this); + } + + @Override + public void setScrollGesturesEnabled(boolean scrollGesturesEnabled) throws RemoteException { + this.scrollGesturesEnabled = scrollGesturesEnabled; + listener.onUiSettingsChanged(this); + } + + @Override + public void setZoomGesturesEnabled(boolean zoomGestures) throws RemoteException { + this.zoomGesturesEnabled = zoomGestures; + listener.onUiSettingsChanged(this); + } + + @Override + public void setTiltGesturesEnabled(boolean tiltGesturesEnabled) throws RemoteException { + this.tiltGesturesEnabled = tiltGesturesEnabled; + listener.onUiSettingsChanged(this); + } + + @Override + public void setRotateGesturesEnabled(boolean rotateGesturesEnabled) throws RemoteException { + this.rotateGesturesEnabled = rotateGesturesEnabled; + listener.onUiSettingsChanged(this); + } + + @Override + public void setAllGesturesEnabled(boolean gestures) throws RemoteException { + scrollGesturesEnabled = gestures; + zoomGesturesEnabled = gestures; + tiltGesturesEnabled = gestures; + rotateGesturesEnabled = gestures; + listener.onUiSettingsChanged(this); + } + + @Override + public boolean isZoomControlsEnabled() throws RemoteException { + return zoomControlsEnabled; + } + + @Override + public boolean isCompassEnabled() throws RemoteException { + return compassEnabled; + } + + @Override + public boolean isMyLocationButtonEnabled() throws RemoteException { + return myLocationButtonEnabled; + } + + @Override + public boolean isScrollGesturesEnabled() throws RemoteException { + return scrollGesturesEnabled; + } + + @Override + public boolean isZoomGesturesEnabled() throws RemoteException { + return zoomGesturesEnabled; + } + + @Override + public boolean isTiltGesturesEnabled() throws RemoteException { + return tiltGesturesEnabled; + } + + @Override + public boolean isRotateGesturesEnabled() throws RemoteException { + return rotateGesturesEnabled; + } + + public static interface UiSettingsListener { + void onUiSettingsChanged(UiSettingsImpl settings) throws RemoteException; + } +} diff --git a/src/org/microg/gms/maps/bitmap/AbstractBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/AbstractBitmapDescriptor.java index 7a4b3b2a..a328032a 100644 --- a/src/org/microg/gms/maps/bitmap/AbstractBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/AbstractBitmapDescriptor.java @@ -28,7 +28,8 @@ public abstract class AbstractBitmapDescriptor { public Bitmap loadBitmap(Context context) { if (bitmap == null) { synchronized (this) { - if (bitmap == null) bitmap = generateBitmap(context); + if (bitmap == null) + bitmap = generateBitmap(context); } } return bitmap; diff --git a/src/org/microg/gms/maps/bitmap/AssetBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/AssetBitmapDescriptor.java index fd2775dd..b13327e8 100644 --- a/src/org/microg/gms/maps/bitmap/AssetBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/AssetBitmapDescriptor.java @@ -25,9 +25,9 @@ import java.io.IOException; public class AssetBitmapDescriptor extends AbstractBitmapDescriptor { private String assetName; - public AssetBitmapDescriptor(String assetName) { + public AssetBitmapDescriptor(String assetName) { this.assetName = assetName; - } + } @Override protected Bitmap generateBitmap(Context context) { diff --git a/src/org/microg/gms/maps/bitmap/BitmapBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/BitmapBitmapDescriptor.java index ba1c9bce..d2c200e1 100644 --- a/src/org/microg/gms/maps/bitmap/BitmapBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/BitmapBitmapDescriptor.java @@ -20,14 +20,19 @@ import android.content.Context; import android.graphics.Bitmap; public class BitmapBitmapDescriptor extends AbstractBitmapDescriptor { - private Bitmap bitmap; + private Bitmap bitmap; - public BitmapBitmapDescriptor(Bitmap bitmap) { - this.bitmap = bitmap; - } + public BitmapBitmapDescriptor(Bitmap bitmap) { + this.bitmap = bitmap; + } - @Override - public Bitmap generateBitmap(Context context) { - return bitmap; - } + @Override + public Bitmap getBitmap() { + return bitmap; + } + + @Override + public Bitmap generateBitmap(Context context) { + return bitmap; + } } diff --git a/src/org/microg/gms/maps/bitmap/BitmapDescriptorFactoryImpl.java b/src/org/microg/gms/maps/bitmap/BitmapDescriptorFactoryImpl.java index 72ff2de1..741d2b11 100644 --- a/src/org/microg/gms/maps/bitmap/BitmapDescriptorFactoryImpl.java +++ b/src/org/microg/gms/maps/bitmap/BitmapDescriptorFactoryImpl.java @@ -24,38 +24,38 @@ import com.google.android.gms.maps.model.internal.IBitmapDescriptorFactoryDelega public class BitmapDescriptorFactoryImpl extends IBitmapDescriptorFactoryDelegate.Stub { - @Override - public IObjectWrapper fromResource(int resourceId) throws RemoteException { - return ObjectWrapper.wrap(new ResourceBitmapDescriptor(resourceId)); - } + @Override + public IObjectWrapper fromResource(int resourceId) throws RemoteException { + return ObjectWrapper.wrap(new ResourceBitmapDescriptor(resourceId)); + } - @Override - public IObjectWrapper fromAsset(String assetName) throws RemoteException { - return ObjectWrapper.wrap(new AssetBitmapDescriptor(assetName)); - } + @Override + public IObjectWrapper fromAsset(String assetName) throws RemoteException { + return ObjectWrapper.wrap(new AssetBitmapDescriptor(assetName)); + } - @Override - public IObjectWrapper fromFile(String fileName) throws RemoteException { - return ObjectWrapper.wrap(new FileBitmapDescriptor(fileName)); - } + @Override + public IObjectWrapper fromFile(String fileName) throws RemoteException { + return ObjectWrapper.wrap(new FileBitmapDescriptor(fileName)); + } - @Override - public IObjectWrapper defaultMarker() throws RemoteException { - return ObjectWrapper.wrap(new DefaultBitmapDescriptor(0)); - } + @Override + public IObjectWrapper defaultMarker() throws RemoteException { + return ObjectWrapper.wrap(new DefaultBitmapDescriptor()); + } - @Override - public IObjectWrapper defaultMarkerWithHue(float hue) throws RemoteException { - return ObjectWrapper.wrap(new DefaultBitmapDescriptor(hue)); - } + @Override + public IObjectWrapper defaultMarkerWithHue(float hue) throws RemoteException { + return ObjectWrapper.wrap(new DefaultBitmapDescriptor(hue)); + } - @Override - public IObjectWrapper fromBitmap(Bitmap bitmap) throws RemoteException { - return ObjectWrapper.wrap(new BitmapBitmapDescriptor(bitmap)); - } + @Override + public IObjectWrapper fromBitmap(Bitmap bitmap) throws RemoteException { + return ObjectWrapper.wrap(new BitmapBitmapDescriptor(bitmap)); + } - @Override - public IObjectWrapper fromPath(String absolutePath) throws RemoteException { - return ObjectWrapper.wrap(new PathBitmapDescriptor(absolutePath)); - } + @Override + public IObjectWrapper fromPath(String absolutePath) throws RemoteException { + return ObjectWrapper.wrap(new PathBitmapDescriptor(absolutePath)); + } } diff --git a/src/org/microg/gms/maps/bitmap/BitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/BitmapDescriptorImpl.java similarity index 53% rename from src/org/microg/gms/maps/bitmap/BitmapDescriptor.java rename to src/org/microg/gms/maps/bitmap/BitmapDescriptorImpl.java index 661455d3..700bbcb3 100644 --- a/src/org/microg/gms/maps/bitmap/BitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/BitmapDescriptorImpl.java @@ -1,19 +1,3 @@ -/* - * Copyright (c) 2014 μg Project Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package org.microg.gms.maps.bitmap; import android.content.Context; @@ -21,22 +5,28 @@ import android.graphics.Bitmap; import android.util.Log; import com.google.android.gms.dynamic.IObjectWrapper; import com.google.android.gms.dynamic.ObjectWrapper; +import com.google.android.gms.maps.model.BitmapDescriptor; -public class BitmapDescriptor { - private final IObjectWrapper remoteObject; +public class BitmapDescriptorImpl { + private BitmapDescriptor descriptor; private boolean loadStarted = false; - public BitmapDescriptor(IObjectWrapper remoteObject) { - this.remoteObject = remoteObject; - } + public BitmapDescriptorImpl(IObjectWrapper remoteObject) { + this(new BitmapDescriptor(remoteObject)); + } - public IObjectWrapper getRemoteObject() { - return remoteObject; - } + public BitmapDescriptorImpl(BitmapDescriptor descriptor) { + this.descriptor = descriptor; + } + + public BitmapDescriptorImpl() { + this(new ObjectWrapper<>(new DefaultBitmapDescriptor(0))); + } public AbstractBitmapDescriptor getDescriptor() { - if (remoteObject == null) return null; - Object unwrap = ObjectWrapper.unwrap(remoteObject); + if (descriptor.getRemoteObject() == null) + return null; + Object unwrap = ObjectWrapper.unwrap(descriptor.getRemoteObject()); if (unwrap instanceof AbstractBitmapDescriptor) { return ((AbstractBitmapDescriptor) unwrap); } else { @@ -51,15 +41,9 @@ public class BitmapDescriptor { return null; } - @Override - public String toString() { - return "BitmapDescriptor{" + - "remote=" + getDescriptor() + - '}'; - } - public synchronized void loadBitmapAsync(final Context context, final Runnable after) { - if (loadStarted) return; + if (loadStarted) + return; loadStarted = true; if (getDescriptor() != null) { new Thread(new Runnable() { diff --git a/src/org/microg/gms/maps/bitmap/DefaultBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/DefaultBitmapDescriptor.java index 632e551e..62dd1d00 100644 --- a/src/org/microg/gms/maps/bitmap/DefaultBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/DefaultBitmapDescriptor.java @@ -24,25 +24,31 @@ import com.google.android.gms.R; import org.microg.gms.maps.ResourcesContainer; public class DefaultBitmapDescriptor extends AbstractBitmapDescriptor { - private float hue; + private float hue; - public DefaultBitmapDescriptor(float hue) { - this.hue = hue; - } + public DefaultBitmapDescriptor() { + this(0); + } - @Override - public Bitmap generateBitmap(Context context) { - Bitmap source = BitmapFactory.decodeResource(ResourcesContainer.get(), R.drawable.maps_default_marker); - Bitmap bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), source.getConfig()); - float[] hsv = new float[3]; - for (int x = 0; x < bitmap.getWidth(); x++) { - for (int y = 0; y < bitmap.getHeight(); y++) { - int pixel = source.getPixel(x, y); - Color.colorToHSV(pixel, hsv); - hsv[0] = (hsv[0] + hue) % 360; - bitmap.setPixel(x, y, Color.HSVToColor(Color.alpha(pixel), hsv)); - } - } - return bitmap; - } + public DefaultBitmapDescriptor(float hue) { + this.hue = hue; + } + + @Override + public Bitmap generateBitmap(Context context) { + Bitmap source = BitmapFactory + .decodeResource(ResourcesContainer.get(), R.drawable.maps_default_marker); + Bitmap bitmap = Bitmap + .createBitmap(source.getWidth(), source.getHeight(), source.getConfig()); + float[] hsv = new float[3]; + for (int x = 0; x < bitmap.getWidth(); x++) { + for (int y = 0; y < bitmap.getHeight(); y++) { + int pixel = source.getPixel(x, y); + Color.colorToHSV(pixel, hsv); + hsv[0] = (hsv[0] + hue) % 360; + bitmap.setPixel(x, y, Color.HSVToColor(Color.alpha(pixel), hsv)); + } + } + return bitmap; + } } diff --git a/src/org/microg/gms/maps/bitmap/FileBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/FileBitmapDescriptor.java index 62327980..0f99fe53 100644 --- a/src/org/microg/gms/maps/bitmap/FileBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/FileBitmapDescriptor.java @@ -23,7 +23,7 @@ import android.graphics.BitmapFactory; public class FileBitmapDescriptor extends AbstractBitmapDescriptor { private String fileName; - public FileBitmapDescriptor(String fileName) { + public FileBitmapDescriptor(String fileName) { this.fileName = fileName; } diff --git a/src/org/microg/gms/maps/bitmap/PathBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/PathBitmapDescriptor.java index 1e1a2f0b..c60c0394 100644 --- a/src/org/microg/gms/maps/bitmap/PathBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/PathBitmapDescriptor.java @@ -17,6 +17,6 @@ package org.microg.gms.maps.bitmap; public class PathBitmapDescriptor { - public PathBitmapDescriptor(String absolutePath) { - } + public PathBitmapDescriptor(String absolutePath) { + } } diff --git a/src/org/microg/gms/maps/bitmap/ResourceBitmapDescriptor.java b/src/org/microg/gms/maps/bitmap/ResourceBitmapDescriptor.java index 1ea9e753..16699241 100644 --- a/src/org/microg/gms/maps/bitmap/ResourceBitmapDescriptor.java +++ b/src/org/microg/gms/maps/bitmap/ResourceBitmapDescriptor.java @@ -25,7 +25,7 @@ public class ResourceBitmapDescriptor extends AbstractBitmapDescriptor { private int resourceId; - public ResourceBitmapDescriptor(int resourceId) { + public ResourceBitmapDescriptor(int resourceId) { this.resourceId = resourceId; } diff --git a/src/org/microg/gms/maps/camera/CameraUpdate.java b/src/org/microg/gms/maps/camera/CameraUpdate.java index 8cb279e5..4bb24a91 100644 --- a/src/org/microg/gms/maps/camera/CameraUpdate.java +++ b/src/org/microg/gms/maps/camera/CameraUpdate.java @@ -16,8 +16,9 @@ package org.microg.gms.maps.camera; -import org.microg.gms.maps.GoogleMapImpl; +import org.oscim.map.Map; public interface CameraUpdate { - void update(GoogleMapImpl map); + void apply(Map map); + void applyAnimated(Map map, int duration); } diff --git a/src/org/microg/gms/maps/camera/CameraUpdateFactoryImpl.java b/src/org/microg/gms/maps/camera/CameraUpdateFactoryImpl.java index 33b57073..e972e761 100644 --- a/src/org/microg/gms/maps/camera/CameraUpdateFactoryImpl.java +++ b/src/org/microg/gms/maps/camera/CameraUpdateFactoryImpl.java @@ -24,139 +24,158 @@ import com.google.android.gms.maps.internal.ICameraUpdateFactoryDelegate; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; -import com.google.android.maps.GeoPoint; -import org.microg.gms.maps.GoogleMapImpl; +import org.microg.gms.maps.GmsMapsTypeHelper; +import org.oscim.core.MapPosition; +import org.oscim.map.Map; public class CameraUpdateFactoryImpl extends ICameraUpdateFactoryDelegate.Stub { - private static final String TAG = CameraUpdateFactoryImpl.class.getName(); + private static final String TAG = CameraUpdateFactoryImpl.class.getName(); - @Override - public IObjectWrapper zoomIn() throws RemoteException { - Log.d(TAG, "zoomIn"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().zoomIn(); - } - }); - } + @Override + public IObjectWrapper zoomIn() throws RemoteException { + Log.d(TAG, "zoomIn"); + return new ObjectWrapper(new MapPositionCameraUpdate() { - @Override - public IObjectWrapper zoomOut() throws RemoteException { - Log.d(TAG, "zoomOut"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().zoomOut(); - } - }); - } - - @Override - public IObjectWrapper scrollBy(final float x, final float y) throws RemoteException { - Log.d(TAG, "scrollBy"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().scrollBy((int) x, (int) y); - } - }); - } - - @Override - public IObjectWrapper zoomTo(final float zoom) throws RemoteException { - Log.d(TAG, "zoomTo"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().setZoom((int) zoom); - } - }); - } - - @Override - public IObjectWrapper zoomBy(final float zoomDelta) throws RemoteException { - Log.d(TAG, "zoomBy"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().setZoom((int) (map.getMapView().getZoomLevel() + zoomDelta)); - } - }); - } - - @Override - public IObjectWrapper zoomByWithFocus(final float zoomDelta, int x, int y) throws RemoteException { - Log.d(TAG, "zoomByWithFocus"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - // TODO focus - map.getController().setZoom((int) (map.getMapView().getZoomLevel() + zoomDelta)); - } - }); - } - - @Override - public IObjectWrapper newCameraPosition(final CameraPosition cameraPosition) throws RemoteException { - Log.d(TAG, "newCameraPosition"); - if (cameraPosition == null) { - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - // Nothing - } - }); - } - return newLatLngZoom(cameraPosition.target, cameraPosition.zoom); - } - - @Override - public IObjectWrapper newLatLng(final LatLng latLng) throws RemoteException { - Log.d(TAG, "newLatLng"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().setCenter(new GeoPoint((int) (latLng.latitude * 1E6), (int) (latLng.longitude * 1E6))); - } - }); - } - - @Override - public IObjectWrapper newLatLngZoom(final LatLng latLng, final float zoom) throws RemoteException { - Log.d(TAG, "newLatLngZoom"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - map.getController().setZoom((int) zoom); - map.getController().setCenter(new GeoPoint((int) (latLng.latitude * 1E6), (int) (latLng.longitude * 1E6))); - } - }); - } - - @Override - public IObjectWrapper newLatLngBounds(final LatLngBounds bounds, int i) throws RemoteException { - Log.d(TAG, "newLatLngBounds"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - double latSpan = bounds.northEast.latitude - bounds.southWest.latitude, - lonSpan = bounds.northEast.longitude - bounds.southWest.longitude; - map.getController().setCenter(new GeoPoint((int) ((bounds.southWest.latitude + latSpan/2) * 1E6), - (int) ((bounds.southWest.longitude + lonSpan/2) * 1E6))); - map.getController().zoomToSpan((int) (latSpan * 1E6), (int) (lonSpan * 1E6)); + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setScale(GmsMapsTypeHelper.fromZoom( + GmsMapsTypeHelper.toZoom(mapPosition.getScale()) + 1)); + return mapPosition; } }); } - @Override - public IObjectWrapper newLatLngBoundsWithSize(LatLngBounds bounds, int i1, int i2, int i3) throws RemoteException { - Log.d(TAG, "newLatLngBoundsWithSize"); - return new ObjectWrapper(new CameraUpdate() { - @Override - public void update(GoogleMapImpl map) { - // TODO - } - }); - } + @Override + public IObjectWrapper zoomOut() throws RemoteException { + Log.d(TAG, "zoomOut"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setScale(GmsMapsTypeHelper.fromZoom( + GmsMapsTypeHelper.toZoom(mapPosition.getScale()) - 1)); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper scrollBy(final float x, final float y) throws RemoteException { + Log.d(TAG, "scrollBy"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setPosition(map.viewport() + .fromScreenPoint((float) (map.getWidth() / 2.0 + x), + (float) (map.getHeight() / 2.0 + y))); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper zoomTo(final float zoom) throws RemoteException { + Log.d(TAG, "zoomTo"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setScale(GmsMapsTypeHelper.fromZoom(zoom)); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper zoomBy(final float zoomDelta) throws RemoteException { + Log.d(TAG, "zoomBy"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setScale(GmsMapsTypeHelper.fromZoom( + GmsMapsTypeHelper.toZoom(mapPosition.getScale()) + zoomDelta)); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper zoomByWithFocus(final float zoomDelta, int x, int y) + throws RemoteException { + Log.d(TAG, "zoomByWithFocus"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setScale(GmsMapsTypeHelper.fromZoom( + GmsMapsTypeHelper.toZoom(mapPosition.getScale()) + zoomDelta)); + Log.w(TAG, "zoomBy with focus not yet supported"); // TODO + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper newCameraPosition(final CameraPosition cameraPosition) + throws RemoteException { + Log.d(TAG, "newCameraPosition"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + return GmsMapsTypeHelper.fromCameraPosition(cameraPosition); + } + }); + } + + @Override + public IObjectWrapper newLatLng(final LatLng latLng) throws RemoteException { + Log.d(TAG, "newLatLng"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setPosition(GmsMapsTypeHelper.fromLatLng(latLng)); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper newLatLngZoom(final LatLng latLng, final float zoom) + throws RemoteException { + Log.d(TAG, "newLatLngZoom"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setPosition(GmsMapsTypeHelper.fromLatLng(latLng)); + mapPosition.setScale(GmsMapsTypeHelper.fromZoom(zoom)); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper newLatLngBounds(final LatLngBounds bounds, int i) throws RemoteException { + Log.d(TAG, "newLatLngBounds"); + return new ObjectWrapper(new MapPositionCameraUpdate() { + @Override + MapPosition getMapPosition(Map map) { + MapPosition mapPosition = map.getMapPosition(); + mapPosition.setByBoundingBox(GmsMapsTypeHelper.fromLatLngBounds(bounds), + map.getWidth(), map.getHeight()); + return mapPosition; + } + }); + } + + @Override + public IObjectWrapper newLatLngBoundsWithSize(LatLngBounds bounds, int i1, int i2, int i3) + throws RemoteException { + Log.d(TAG, "newLatLngBoundsWithSize"); + return new ObjectWrapper(new NoCameraUpdate()); + } } diff --git a/src/org/microg/gms/maps/camera/MapPositionCameraUpdate.java b/src/org/microg/gms/maps/camera/MapPositionCameraUpdate.java new file mode 100644 index 00000000..fd8d5ca1 --- /dev/null +++ b/src/org/microg/gms/maps/camera/MapPositionCameraUpdate.java @@ -0,0 +1,19 @@ +package org.microg.gms.maps.camera; + +import org.oscim.core.MapPosition; +import org.oscim.map.Map; + +public abstract class MapPositionCameraUpdate implements CameraUpdate { + + abstract MapPosition getMapPosition(Map map); + + @Override + public void apply(Map map) { + map.setMapPosition(getMapPosition(map)); + } + + @Override + public void applyAnimated(Map map, int duration) { + map.animator().animateTo(duration, getMapPosition(map)); + } +} diff --git a/src/org/microg/gms/maps/camera/NoCameraUpdate.java b/src/org/microg/gms/maps/camera/NoCameraUpdate.java new file mode 100644 index 00000000..ebeb41b5 --- /dev/null +++ b/src/org/microg/gms/maps/camera/NoCameraUpdate.java @@ -0,0 +1,15 @@ +package org.microg.gms.maps.camera; + +import org.oscim.map.Map; + +public class NoCameraUpdate implements CameraUpdate { + @Override + public void apply(Map map) { + + } + + @Override + public void applyAnimated(Map map, int duration) { + + } +} diff --git a/src/org/microg/gms/maps/markup/CircleImpl.java b/src/org/microg/gms/maps/markup/CircleImpl.java index 9dce0b6d..82c17d6d 100644 --- a/src/org/microg/gms/maps/markup/CircleImpl.java +++ b/src/org/microg/gms/maps/markup/CircleImpl.java @@ -32,7 +32,6 @@ public class CircleImpl extends ICircleDelegate.Stub { private int fillColor; public CircleImpl(CircleOptions options) { - } @Override @@ -117,7 +116,7 @@ public class CircleImpl extends ICircleDelegate.Stub { @Override public boolean equalsRemote(ICircleDelegate other) throws RemoteException { - return other != null &&other.getId().equals(getId()); + return other != null && other.getId().equals(getId()); } @Override diff --git a/src/org/microg/gms/maps/markup/GroundOverlayImpl.java b/src/org/microg/gms/maps/markup/GroundOverlayImpl.java index 007e32ef..85ad3950 100644 --- a/src/org/microg/gms/maps/markup/GroundOverlayImpl.java +++ b/src/org/microg/gms/maps/markup/GroundOverlayImpl.java @@ -34,7 +34,7 @@ public class GroundOverlayImpl extends IGroundOverlayDelegate.Stub { private float bearing; public GroundOverlayImpl(GroundOverlayOptions options) { - + } @Override diff --git a/src/org/microg/gms/maps/markup/InfoWindow.java b/src/org/microg/gms/maps/markup/InfoWindow.java index c7448065..3f0872e6 100644 --- a/src/org/microg/gms/maps/markup/InfoWindow.java +++ b/src/org/microg/gms/maps/markup/InfoWindow.java @@ -17,25 +17,16 @@ package org.microg.gms.maps.markup; import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Point; -import android.graphics.Rect; -import android.os.RemoteException; -import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; import com.google.android.gms.R; -import com.google.android.gms.maps.internal.IOnInfoWindowClickListener; import com.google.android.gms.maps.model.internal.IMarkerDelegate; -import com.google.android.maps.GeoPoint; -import com.google.android.maps.MapView; -import com.google.android.maps.Overlay; import org.microg.gms.maps.GoogleMapImpl; import org.microg.gms.maps.ResourcesContainer; -public class InfoWindow extends Overlay { +public class InfoWindow { private static final String TAG = InfoWindow.class.getName(); private Context context; private View window; @@ -61,17 +52,14 @@ public class InfoWindow extends Overlay { } public void setContent(View view) { - if (view == null) return; + if (view == null) + return; setWindow(new DefaultWindow(view)); } public void buildDefault() { - try { - if (marker.getTitle() != null) + if (marker.getTitle() != null) setContent(new DefaultContent()); - } catch (RemoteException e) { - // Not remote... - } } public void destroy() { @@ -84,6 +72,7 @@ public class InfoWindow extends Overlay { return marker; } + /* @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { if (window != null && marker.getHeight() != -1 && !shadow) { @@ -91,20 +80,21 @@ public class InfoWindow extends Overlay { Log.d(TAG, "draw InfoWindow"); window.measure(0, 0); window.layout(0, 0, window.getMeasuredWidth(), window.getMeasuredHeight()); - Point point = mapView.getProjection().toPixels(marker.getPosition().toGeoPoint(), null); - /* + //Point point = mapView.getProjection().toPixels(marker.getPosition().toGeoPoint(), null); + // osmdroid 4.1 bugfix Point zero = mapView.getProjection().toPixels(new GeoPoint(0, 0), null); point.offset(-zero.x, -zero.y); - */ + + point.offset(-window.getMeasuredWidth() / 2, -window.getMeasuredHeight() - marker.getHeight()); Log.d(TAG, point.toString()); canvas.save(); canvas.translate(point.x, point.y); window.draw(canvas); canvas.restore(); - } catch (RemoteException e) { + } catch (Exception e) { // This is not remote... } } @@ -113,7 +103,7 @@ public class InfoWindow extends Overlay { @Override public boolean onTap(GeoPoint p, MapView mapView) { try { - IOnInfoWindowClickListener listener = map.getInfoWindowClickListener(); + IOnInfoWindowClickListener listener = null; //map.getInfoWindowClickListener(); if (listener != null) { Point clickPoint = mapView.getProjection().toPixels(p, null); Point markerPoint = mapView.getProjection().toPixels(marker.getPosition().toGeoPoint(), null); @@ -129,12 +119,14 @@ public class InfoWindow extends Overlay { } return true; } + } - } catch (RemoteException e) { + } catch (Exception e) { // This is not remote... } return false; } +*/ private class DefaultWindow extends FrameLayout { public DefaultWindow(View view) { @@ -148,19 +140,17 @@ public class InfoWindow extends Overlay { public DefaultContent() { super(context); setOrientation(LinearLayout.VERTICAL); - try { - TextView title = new TextView(context); - title.setTextAppearance(context, android.R.style.TextAppearance_DeviceDefault_Medium_Inverse); - title.setText(marker.getTitle()); - addView(title); - if (marker.getSnippet() != null) { - TextView snippet = new TextView(context); - snippet.setTextAppearance(context, android.R.style.TextAppearance_DeviceDefault_Inverse); - snippet.setText(marker.getSnippet()); - addView(snippet); - } - } catch (RemoteException e) { - // ... + TextView title = new TextView(context); + title.setTextAppearance(context, + android.R.style.TextAppearance_DeviceDefault_Medium_Inverse); + title.setText(marker.getTitle()); + addView(title); + if (marker.getSnippet() != null) { + TextView snippet = new TextView(context); + snippet.setTextAppearance(context, + android.R.style.TextAppearance_DeviceDefault_Inverse); + snippet.setText(marker.getSnippet()); + addView(snippet); } } } diff --git a/src/org/microg/gms/maps/markup/MarkerImpl.java b/src/org/microg/gms/maps/markup/MarkerImpl.java index 0cffb1bf..a2624e43 100644 --- a/src/org/microg/gms/maps/markup/MarkerImpl.java +++ b/src/org/microg/gms/maps/markup/MarkerImpl.java @@ -16,53 +16,39 @@ package org.microg.gms.maps.markup; -import android.graphics.*; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.os.Build; +import android.content.Context; +import android.graphics.Bitmap; import android.os.RemoteException; import android.util.Log; import com.google.android.gms.dynamic.IObjectWrapper; -import com.google.android.gms.dynamic.ObjectWrapper; -import com.google.android.gms.maps.model.internal.IMarkerDelegate; -import com.google.android.gms.maps.internal.IOnMarkerClickListener; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; -import com.google.android.maps.GeoPoint; -import com.google.android.maps.MapView; -import com.google.android.maps.Overlay; -import org.microg.gms.maps.bitmap.BitmapDescriptor; -import org.microg.gms.maps.bitmap.DefaultBitmapDescriptor; -import org.microg.gms.maps.GoogleMapImpl; +import com.google.android.gms.maps.model.internal.IMarkerDelegate; +import org.microg.gms.maps.GmsMapsTypeHelper; +import org.microg.gms.maps.bitmap.BitmapDescriptorImpl; +import org.oscim.android.canvas.AndroidBitmap; +import org.oscim.layers.marker.MarkerItem; +import org.oscim.layers.marker.MarkerSymbol; -public class MarkerImpl extends IMarkerDelegate.Stub { +public class MarkerImpl extends IMarkerDelegate.Stub implements Markup { private static final String TAG = MarkerImpl.class.getName(); private final String id; - private float alpha; - private boolean flat; - private boolean draggable; - private LatLng position; - private float anchorU; - private float anchorV; - private float rotation; - private String snippet; - private String title; - private boolean visible; + private MarkerOptions options; + private BitmapDescriptorImpl icon; - private BitmapDescriptor icon; - - private GoogleMapImpl map; - private Overlay overlay = new Overlay() { + private MarkupListener listener; + /*private Overlay overlay = new Overlay() { private Point point = new Point(); @Override public boolean onTap(GeoPoint p, MapView mapView) { Point touchPoint = mapView.getProjection().toPixels(p, null); Bitmap bitmap = icon.getBitmap(); - if (bitmap == null) return false; - mapView.getProjection().toPixels(position.toGeoPoint(), point); + if (bitmap == null) + return false; + //mapView.getProjection().toPixels(position.toGeoPoint(), point); float xTest = bitmap.getWidth() * anchorU + touchPoint.x - point.x; float yTest = bitmap.getHeight() * anchorV + touchPoint.y - point.y; if (0 < xTest && xTest < bitmap.getWidth() && 0 < yTest && yTest < bitmap.getHeight()) { @@ -87,16 +73,19 @@ public class MarkerImpl extends IMarkerDelegate.Stub { @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { - if (shadow /*&& flat*/) return; // shadows are broken right now, we skip them + if (shadow && flat) + return; // shadows are broken right now, we skip them Bitmap bitmap = icon.getBitmap(); if (bitmap != null) { - mapView.getProjection().toPixels(position.toGeoPoint(), point); + //mapView.getProjection().toPixels(position.toGeoPoint(), point); float x = point.x - bitmap.getWidth() * anchorU; float y = point.y - bitmap.getHeight() * anchorV; Paint paint = new Paint(); paint.setAlpha((int) (alpha * 255)); if (shadow) { - paint.setColorFilter(new PorterDuffColorFilter(Color.argb((int) (128 * alpha), 0, 0, 0), PorterDuff.Mode.SRC_IN)); + paint.setColorFilter( + new PorterDuffColorFilter(Color.argb((int) (128 * alpha), 0, 0, 0), + PorterDuff.Mode.SRC_IN)); } Matrix matrix = new Matrix(); matrix.setRotate(rotation, bitmap.getWidth() / 2, bitmap.getHeight() / 2); @@ -115,100 +104,95 @@ public class MarkerImpl extends IMarkerDelegate.Stub { }); } } - }; + };*/ - public MarkerImpl(String id, MarkerOptions options, GoogleMapImpl map) { + public MarkerImpl(String id, MarkerOptions options, MarkupListener listener) { this.id = id; - this.map = map; - this.alpha = options.getAlpha(); - this.draggable = options.isDraggable(); - this.position = options.getPosition(); - if (position == null) position = new LatLng(0, 0); - this.rotation = options.getRotation(); - this.anchorU = options.getAnchorU(); - this.anchorV = options.getAnchorV(); - this.snippet = options.getSnippet(); - this.title = options.getTitle(); - this.visible = options.isVisible(); - this.icon = options.getIcon(); - if (icon == null) - icon = new BitmapDescriptor(new ObjectWrapper(new DefaultBitmapDescriptor(0))); - Log.d(TAG, "New marker " + id + " with title " + title + " @ " + position); + this.listener = listener; + this.options = options == null ? new MarkerOptions() : options; + if (options.getPosition() == null) { + options.position(new LatLng(0, 0)); + } + icon = options.getIcon() == null ? null : new BitmapDescriptorImpl(options.getIcon()); + Log.d(TAG, "New marker " + id + " with title " + options.getTitle() + " @ " + + options.getPosition()); } @Override - public void remove() throws RemoteException { - map.remove(this); + public void remove() { + listener.remove(this); } @Override - public String getId() throws RemoteException { + public String getId() { return id; } @Override - public void setPosition(LatLng pos) throws RemoteException { - this.position = pos; + public void setPosition(LatLng pos) { + options.position(pos); + listener.update(this); } @Override - public LatLng getPosition() throws RemoteException { - return position; + public LatLng getPosition() { + return options.getPosition(); } @Override - public void setTitle(String title) throws RemoteException { - this.title = title; + public void setTitle(String title) { + options.title(title); + listener.update(this); } @Override - public String getTitle() throws RemoteException { - return title; + public String getTitle() { + return options.getTitle(); } @Override - public void setSnippet(String snippet) throws RemoteException { - this.snippet = snippet; + public void setSnippet(String snippet) { + options.snippet(snippet); } @Override - public String getSnippet() throws RemoteException { - return snippet; + public String getSnippet() { + return options.getSnippet(); } @Override - public void setDraggable(boolean drag) throws RemoteException { - this.draggable = drag; + public void setDraggable(boolean drag) { + options.draggable(drag); } @Override - public boolean isDraggable() throws RemoteException { - return draggable; + public boolean isDraggable() { + return options.isDraggable(); } @Override - public void showInfoWindow() throws RemoteException { + public void showInfoWindow() { } @Override - public void hideInfoWindow() throws RemoteException { + public void hideInfoWindow() { } @Override - public boolean isInfoWindowShown() throws RemoteException { + public boolean isInfoWindowShown() { return false; } @Override - public void setVisible(boolean visible) throws RemoteException { - this.visible = visible; + public void setVisible(boolean visible) { + options.visible(visible); } @Override - public boolean isVisible() throws RemoteException { - return visible; + public boolean isVisible() { + return options.isVisible(); } @Override @@ -217,69 +201,89 @@ public class MarkerImpl extends IMarkerDelegate.Stub { } @Override - public int hashCodeRemote() throws RemoteException { + public int hashCodeRemote() { return hashCode(); } @Override - public void setIcon(IObjectWrapper obj) throws RemoteException { - icon = new BitmapDescriptor(obj); - if (icon == null) - icon = new BitmapDescriptor(new ObjectWrapper(new DefaultBitmapDescriptor(0))); - map.redraw(); + public void setIcon(IObjectWrapper obj) { + if (obj == null) { + icon = new BitmapDescriptorImpl(); + } else { + icon = new BitmapDescriptorImpl(obj); + } + listener.update(this); } @Override - public void setAnchor(float x, float y) throws RemoteException { - anchorU = x; - anchorV = y; - map.redraw(); + public void setAnchor(float x, float y) { + options.anchor(x, y); + listener.update(this); } @Override - public void setFlat(boolean flat) throws RemoteException { - map.redraw(); + public void setFlat(boolean flat) { + options.flat(flat); + listener.update(this); } @Override - public boolean isFlat() throws RemoteException { - return false; + public boolean isFlat() { + return options.isFlat(); } @Override - public void setRotation(float rotation) throws RemoteException { - this.rotation = rotation; - map.redraw(); + public void setRotation(float rotation) { + options.rotation(rotation); + listener.update(this); } @Override - public float getRotation() throws RemoteException { - return rotation; + public float getRotation() { + return options.getRotation(); } @Override - public void setInfoWindowAnchor(float x, float y) throws RemoteException { - + public void setInfoWindowAnchor(float x, float y) { + options.infoWindowAnchor(x, y); } @Override - public void setAlpha(float alpha) throws RemoteException { - this.alpha = alpha; - map.redraw(); + public void setAlpha(float alpha) { + options.alpha(alpha); + listener.update(this); } @Override - public float getAlpha() throws RemoteException { - return alpha; - } - - public Overlay getOverlay() { - return overlay; + public float getAlpha() { + return options.getAlpha(); } public int getHeight() { Bitmap bitmap = icon.getBitmap(); - if (bitmap == null) return -1; + if (bitmap == null) + return -1; return bitmap.getHeight(); } + + @Override + public MarkerItem getMarkerItem(Context context) { + MarkerItem item = new MarkerItem(getId(), getTitle(), getSnippet(), + GmsMapsTypeHelper.fromLatLng(getPosition())); + if (icon != null) { + if (icon.getBitmap() != null) { + item.setMarker( + new MarkerSymbol(new AndroidBitmap(icon.getBitmap()), options.getAnchorU(), + options.getAnchorV(), isFlat())); + } else { + icon.loadBitmapAsync(context, new Runnable() { + @Override + public void run() { + listener.update(MarkerImpl.this); + } + }); + } + } + return item; + } } diff --git a/src/org/microg/gms/maps/markup/Markup.java b/src/org/microg/gms/maps/markup/Markup.java new file mode 100644 index 00000000..d01a0543 --- /dev/null +++ b/src/org/microg/gms/maps/markup/Markup.java @@ -0,0 +1,16 @@ +package org.microg.gms.maps.markup; + +import android.content.Context; +import org.oscim.layers.marker.MarkerItem; + +public interface Markup { + public MarkerItem getMarkerItem(Context context); + + public String getId(); + + public static interface MarkupListener { + void update(Markup markup); + + void remove(Markup markup); + } +} diff --git a/src/org/microg/gms/maps/markup/TileOverlayImpl.java b/src/org/microg/gms/maps/markup/TileOverlayImpl.java new file mode 100644 index 00000000..29ef518f --- /dev/null +++ b/src/org/microg/gms/maps/markup/TileOverlayImpl.java @@ -0,0 +1,6 @@ +package org.microg.gms.maps.markup; + +import com.google.android.gms.maps.model.internal.ITileOverlayDelegate; + +public class TileOverlayImpl extends ITileOverlayDelegate.Stub { +}