summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2017-10-11 11:26:14 -0400
committerJoey Grover <joeygrover@gmail.com>2017-10-11 11:26:14 -0400
commitcb361499473c21b9d6dee9cfe14ffb6287e422f7 (patch)
treee1293a5695db2e04f0f2a18bb0c30bbfb579551c
parent19b02e309632579f8d55cf8bf08ae2c161e2df86 (diff)
downloadsdl_android-cb361499473c21b9d6dee9cfe14ffb6287e422f7.tar.gz
Scale touch events according to streaming resolution
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java38
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/streaming/video/SdlRemoteDisplay.java2
2 files changed, 35 insertions, 5 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
index d49030c6d..21f8ce37a 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -6256,6 +6256,10 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
}else{
//We just use default video streaming params
VideoStreamingParameters params = new VideoStreamingParameters();
+ DisplayCapabilities dispCap = (DisplayCapabilities)_systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAY);
+ if(dispCap !=null){
+ params.setResolution(dispCap.getScreenParams().getImageResolution());
+ }
sdlSession.setDesiredVideoParams(params);
manager.startVideoStreaming(remoteDisplay,params, encrypted);
}
@@ -6279,6 +6283,7 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
private Class<? extends SdlRemoteDisplay> remoteDisplayClass = null;
SdlRemoteDisplay remoteDisplay;
IVideoStreamListener streamListener;
+ float[] touchScalar = {1.0f,1.0f}; //x, y
//Touch manager
//Haptic manager
@@ -6333,7 +6338,7 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
internalInterface.removeServiceListener(SessionType.NAV,this);
}
- private void createDisplay(Display disp){
+ private void createDisplay(final Display disp){
try{
if (disp == null){
return;
@@ -6344,12 +6349,37 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
remoteDisplay.dismissPresentation();
}
- FutureTask<Boolean> fTask = new FutureTask<Boolean>( new SdlRemoteDisplay.Creator(context, disp, remoteDisplay, remoteDisplayClass, new SdlRemoteDisplay.Creator.Callback(){
+ FutureTask<Boolean> fTask = new FutureTask<Boolean>( new SdlRemoteDisplay.Creator(context, disp, remoteDisplay, remoteDisplayClass, new SdlRemoteDisplay.Callback(){
@Override
public void onCreated(SdlRemoteDisplay remoteDisplay) {
//Remote display has been created.
//Now is a good time to do parsing for spatial data
VideoStreamingManager.this.remoteDisplay = remoteDisplay;
+
+ //Get touch scalars
+ ImageResolution resolution = null;
+ if(getWiProVersion()>=5){ //At this point we should already have the capability
+ VideoStreamingCapability capability = (VideoStreamingCapability)_systemCapabilityManager.getCapability(SystemCapabilityType.VIDEO_STREAMING);
+ resolution = capability.getPreferredResolution();
+ }else {
+ DisplayCapabilities dispCap = (DisplayCapabilities) _systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAY);
+ if (dispCap != null) {
+ resolution = (dispCap.getScreenParams().getImageResolution());
+ }
+ }
+ if(resolution != null){
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ disp.getMetrics(displayMetrics);
+ touchScalar[0] = ((float)displayMetrics.widthPixels) / resolution.getResolutionWidth();
+ touchScalar[1] = ((float)displayMetrics.heightPixels) / resolution.getResolutionHeight();
+ }
+
+ }
+
+ @Override
+ public void onInvalidated(SdlRemoteDisplay remoteDisplay) {
+ //Our view has been invalidated
+ //A good time to refresh spatial data
}
} ));
Thread showPresentation = new Thread(fTask);
@@ -6393,8 +6423,8 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
TouchCoord coord = coordList.get(coordList.size() - 1);
if (coord == null){ return null;}
- x = coord.getX();
- y = coord.getY();
+ x = (coord.getX() * touchScalar[0]);
+ y = (coord.getY() * touchScalar[1]);
if (x == 0 && y == 0){ return null;}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/streaming/video/SdlRemoteDisplay.java b/sdl_android/src/main/java/com/smartdevicelink/streaming/video/SdlRemoteDisplay.java
index f4e2a315a..d354f461f 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/streaming/video/SdlRemoteDisplay.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/streaming/video/SdlRemoteDisplay.java
@@ -28,7 +28,7 @@ public class SdlRemoteDisplay extends Presentation {
protected View mainView;
protected Handler handler = new Handler();
protected Handler uiHandler = new Handler(Looper.getMainLooper());
-
+ protected Callback callback;
public SdlRemoteDisplay(Context context, Display display) {
super(context, display);