Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.smartdevicelink.proxy.rpc.GetSystemCapability;
import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse;
import com.smartdevicelink.proxy.rpc.HMICapabilities;
import com.smartdevicelink.proxy.rpc.ImageField;
import com.smartdevicelink.proxy.rpc.OnHMIStatus;
import com.smartdevicelink.proxy.rpc.OnSystemCapabilityUpdated;
import com.smartdevicelink.proxy.rpc.PhoneCapability;
Expand All @@ -37,10 +38,13 @@
import com.smartdevicelink.proxy.rpc.enums.AppServiceType;
import com.smartdevicelink.proxy.rpc.enums.AudioStreamingState;
import com.smartdevicelink.proxy.rpc.enums.DisplayType;
import com.smartdevicelink.proxy.rpc.enums.FileType;
import com.smartdevicelink.proxy.rpc.enums.HMILevel;
import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities;
import com.smartdevicelink.proxy.rpc.enums.ImageFieldName;
import com.smartdevicelink.proxy.rpc.enums.ImageType;
import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat;
import com.smartdevicelink.proxy.rpc.enums.PredefinedLayout;
import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows;
import com.smartdevicelink.proxy.rpc.enums.PrerecordedSpeech;
import com.smartdevicelink.proxy.rpc.enums.Result;
Expand Down Expand Up @@ -1075,4 +1079,33 @@ public PermissionManager getPermissionManager() {
return null;
}
}

@Test
public void testFixingIncorrectCapabilities() {
SetDisplayLayoutResponse setDisplayLayoutResponse;

DisplayCapabilities RegisterAppInterFaceCapabilities = new DisplayCapabilities()
.setImageFields(Collections.singletonList(new ImageField(ImageFieldName.graphic, Collections.singletonList(FileType.GRAPHIC_PNG))));

DisplayCapabilities setDisplayLayoutCapabilities = new DisplayCapabilities()
.setImageFields(new ArrayList<ImageField>());

LifecycleManager lcm = new LifecycleManager(new BaseLifecycleManager.AppConfig(), null, null);
lcm.initialMediaCapabilities = RegisterAppInterFaceCapabilities;


// Test switching to MEDIA template - Capabilities in setDisplayLayoutResponse should be replaced with the ones from RAIR
lcm.lastDisplayLayoutRequestTemplate = PredefinedLayout.MEDIA.toString();
setDisplayLayoutResponse = new SetDisplayLayoutResponse()
.setDisplayCapabilities(setDisplayLayoutCapabilities);
lcm.fixIncorrectDisplayCapabilities(setDisplayLayoutResponse);
assertEquals(RegisterAppInterFaceCapabilities, setDisplayLayoutResponse.getDisplayCapabilities());

// Test switching to non-MEDIA template - Capabilities in setDisplayLayoutResponse should not be altered
lcm.lastDisplayLayoutRequestTemplate = PredefinedLayout.TEXT_WITH_GRAPHIC.toString();
setDisplayLayoutResponse = new SetDisplayLayoutResponse()
.setDisplayCapabilities(setDisplayLayoutCapabilities);
lcm.fixIncorrectDisplayCapabilities(setDisplayLayoutResponse);
assertEquals(setDisplayLayoutCapabilities, setDisplayLayoutResponse.getDisplayCapabilities());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import com.smartdevicelink.proxy.RPCNotification;
import com.smartdevicelink.proxy.RPCRequest;
import com.smartdevicelink.proxy.RPCResponse;
import com.smartdevicelink.proxy.rpc.DisplayCapabilities;
import com.smartdevicelink.proxy.rpc.GenericResponse;
import com.smartdevicelink.proxy.rpc.OnAppInterfaceUnregistered;
import com.smartdevicelink.proxy.rpc.OnButtonEvent;
Expand All @@ -61,6 +62,8 @@
import com.smartdevicelink.proxy.rpc.RegisterAppInterface;
import com.smartdevicelink.proxy.rpc.RegisterAppInterfaceResponse;
import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
import com.smartdevicelink.proxy.rpc.SetDisplayLayout;
import com.smartdevicelink.proxy.rpc.SetDisplayLayoutResponse;
import com.smartdevicelink.proxy.rpc.SubscribeButton;
import com.smartdevicelink.proxy.rpc.SystemRequest;
import com.smartdevicelink.proxy.rpc.TTSChunk;
Expand All @@ -73,6 +76,7 @@
import com.smartdevicelink.proxy.rpc.enums.FileType;
import com.smartdevicelink.proxy.rpc.enums.HMILevel;
import com.smartdevicelink.proxy.rpc.enums.Language;
import com.smartdevicelink.proxy.rpc.enums.PredefinedLayout;
import com.smartdevicelink.proxy.rpc.enums.RequestType;
import com.smartdevicelink.proxy.rpc.enums.Result;
import com.smartdevicelink.proxy.rpc.enums.SdlDisconnectedReason;
Expand Down Expand Up @@ -132,6 +136,8 @@ abstract class BaseLifecycleManager {
BaseTransportConfig _transportConfig;
private Taskmaster taskmaster;
private boolean didCheckSystemInfo = false;
String lastDisplayLayoutRequestTemplate;
DisplayCapabilities initialMediaCapabilities;

BaseLifecycleManager(AppConfig appConfig, BaseTransportConfig config, LifecycleListener listener) {
this.appConfig = appConfig;
Expand Down Expand Up @@ -405,6 +411,10 @@ public void onReceived(RPCMessage message) {
//If the vehicle is acceptable and this is the first check, init security lib
setSecurityLibraryIfAvailable(vehicleType);
}
// HAX: Issue #1690, Ford Sync bug returning incorrect display capabilities (https://github.com/smartdevicelink/sdl_java_suite/issues/1690). Store the initial capabilities if we are a media app so that we can use them in the future.
if (appConfig.appType.contains(AppHMIType.MEDIA)) {
initialMediaCapabilities = raiResponse.getDisplayCapabilities();
}
systemCapabilityManager.parseRAIResponse(raiResponse);
break;
case ON_HMI_STATUS:
Expand Down Expand Up @@ -825,6 +835,10 @@ private void sendRPCMessagePrivate(RPCMessage message, boolean isInternalMessage
addOnRPCResponseListener(listener, corrId);
}
}
// HAX: Issue #1690, Ford Sync bug returning incorrect display capabilities (https://github.com/smartdevicelink/sdl_java_suite/issues/1690). Save the next desired layout type to the update capabilities when the SetDisplayLayout response is received
if (FunctionID.SET_DISPLAY_LAYOUT.toString().equals(message.getFunctionName())) {
lastDisplayLayoutRequestTemplate = ((SetDisplayLayout)message).getDisplayLayout();
}
} else if (RPCMessage.KEY_RESPONSE.equals(message.getMessageType())) { // Response Specifics
RPCResponse response = (RPCResponse) message;
pm.setRPCType((byte) 0x01);
Expand Down Expand Up @@ -855,6 +869,16 @@ private void sendRPCMessagePrivate(RPCMessage message, boolean isInternalMessage
}
}

// HAX: Issue #1690, Ford Sync bug returning incorrect display capabilities (https://github.com/smartdevicelink/sdl_java_suite/issues/1690). Use the initial capabilities from RAIR instead of the incorrect ones that are included in SetDisplayLayoutResponse.
void fixIncorrectDisplayCapabilities(RPCMessage rpc) {
if (RPCMessage.KEY_RESPONSE.equals(rpc.getMessageType()) && rpc.getFunctionName().equals(FunctionID.SET_DISPLAY_LAYOUT.toString()) &&
initialMediaCapabilities != null && lastDisplayLayoutRequestTemplate.equals(PredefinedLayout.MEDIA.toString())) {

SetDisplayLayoutResponse setDisplayLayoutResponse = (SetDisplayLayoutResponse) rpc;
setDisplayLayoutResponse.setDisplayCapabilities(initialMediaCapabilities);
}
}

/* *******************************************************************************************************
**************************************** ISdlSessionListener START **************************************
*********************************************************************************************************/
Expand All @@ -875,6 +899,8 @@ public void onRPCMessageReceived(RPCMessage rpc) {

rpc.format(rpcSpecVersion, true);

fixIncorrectDisplayCapabilities(rpc);

BaseLifecycleManager.this.onRPCReceived(rpc);

if (RPCMessage.KEY_RESPONSE.equals(messageType)) {
Expand Down Expand Up @@ -1197,6 +1223,8 @@ private RPCNotification handleButtonNotificationFormatting(RPCMessage notificati
void clean() {
firstTimeFull = true;
currentHMIStatus = null;
lastDisplayLayoutRequestTemplate = null;
initialMediaCapabilities = null;
if (rpcListeners != null) {
rpcListeners.clear();
}
Expand Down