diff --git a/src/org/geometerplus/android/fbreader/api/Api.java b/src/org/geometerplus/android/fbreader/api/Api.java index 45bf4ff76..3613e65a1 100644 --- a/src/org/geometerplus/android/fbreader/api/Api.java +++ b/src/org/geometerplus/android/fbreader/api/Api.java @@ -84,4 +84,5 @@ public interface Api { String getTapZoneAction(String name, int h, int v, boolean singleTap) throws ApiException; void setTapZoneAction(String name, int h, int v, boolean singleTap, String action) throws ApiException; + String getTapActionByCoordinates(String name, int x, int y, int width, int height, boolean singleTap) throws ApiException; } diff --git a/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java b/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java index bf5cb5b70..2cfb96971 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java +++ b/src/org/geometerplus/android/fbreader/api/ApiClientImplementation.java @@ -439,6 +439,17 @@ public class ApiClientImplementation implements ServiceConnection, Api, ApiMetho }); } + public String getTapActionByCoordinates(String name, int x, int y, int width, int height, boolean singleTap) throws ApiException { + return requestString(GET_TAP_ACTION_BY_COORDINATES, new ApiObject[] { + ApiObject.envelope(name), + ApiObject.envelope(x), + ApiObject.envelope(y), + ApiObject.envelope(width), + ApiObject.envelope(height), + ApiObject.envelope(singleTap) + }); + } + public void setTapZoneAction(String name, int h, int v, boolean singleTap, String action) throws ApiException { request(SET_TAPZONE_ACTION, new ApiObject[] { ApiObject.envelope(name), diff --git a/src/org/geometerplus/android/fbreader/api/ApiMethods.java b/src/org/geometerplus/android/fbreader/api/ApiMethods.java index d358c4e6d..27ed954c6 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiMethods.java +++ b/src/org/geometerplus/android/fbreader/api/ApiMethods.java @@ -74,4 +74,5 @@ interface ApiMethods { int GET_TAPZONE_ACTION = 931; int SET_TAPZONE_ACTION = 932; + int GET_TAP_ACTION_BY_COORDINATES = 933; } diff --git a/src/org/geometerplus/android/fbreader/api/ApiObject.java b/src/org/geometerplus/android/fbreader/api/ApiObject.java index fb8a4fdfb..0d927cc44 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiObject.java +++ b/src/org/geometerplus/android/fbreader/api/ApiObject.java @@ -19,7 +19,6 @@ public abstract class ApiObject implements Parcelable { int BOOLEAN = 3; int DATE = 4; int LONG = 5; - int FLOAT = 6; int TEXT_POSITION = 10; } @@ -54,25 +53,6 @@ public abstract class ApiObject implements Parcelable { } } - static class Float extends ApiObject { - final float Value; - - Float(float value) { - Value = value; - } - - @Override - protected int type() { - return Type.FLOAT; - } - - @Override - public void writeToParcel(Parcel parcel, int flags) { - super.writeToParcel(parcel, flags); - parcel.writeFloat(Value); - } - } - static class Long extends ApiObject { final long Value; @@ -172,10 +152,6 @@ public abstract class ApiObject implements Parcelable { return new Integer(value); } - static ApiObject envelope(float value) { - return new Float(value); - } - static ApiObject envelope(long value) { return new Long(value); } @@ -231,8 +207,6 @@ public abstract class ApiObject implements Parcelable { return Void.Instance; case Type.INT: return new Integer(parcel.readInt()); - case Type.FLOAT: - return new Float(parcel.readFloat()); case Type.LONG: return new Long(parcel.readLong()); case Type.BOOLEAN: diff --git a/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java b/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java index f7fa6bf9f..a5df3eb92 100644 --- a/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java +++ b/src/org/geometerplus/android/fbreader/api/ApiServerImplementation.java @@ -186,6 +186,15 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A ((ApiObject.Integer)parameters[2]).Value, ((ApiObject.Boolean)parameters[3]).Value )); + case GET_TAP_ACTION_BY_COORDINATES: + return ApiObject.envelope(getTapActionByCoordinates( + ((ApiObject.String)parameters[0]).Value, + ((ApiObject.Integer)parameters[1]).Value, + ((ApiObject.Integer)parameters[2]).Value, + ((ApiObject.Integer)parameters[3]).Value, + ((ApiObject.Integer)parameters[4]).Value, + ((ApiObject.Boolean)parameters[5]).Value + )); case SET_TAPZONE_ACTION: setTapZoneAction( ((ApiObject.String)parameters[0]).Value, @@ -559,6 +568,12 @@ public class ApiServerImplementation extends ApiInterface.Stub implements Api, A ); } + public String getTapActionByCoordinates(String name, int x, int y, int width, int height, boolean singleTap) { + return TapZoneMap.zoneMap(name).getActionByCoordinates( + x, y, width, height, singleTap ? TapZoneMap.Tap.singleNotDoubleTap : TapZoneMap.Tap.doubleTap + ); + } + public void setTapZoneAction(String name, int h, int v, boolean singleTap, String action) { TapZoneMap.zoneMap(name).setActionForZone(h, v, singleTap, action); }