diff options
author | Bilal Alsharifi <599206+bilal-alsharifi@users.noreply.github.com> | 2019-10-10 15:16:54 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-10 15:16:54 -0400 |
commit | ac66a7929e61274efb3faa1c0746a654051c7d41 (patch) | |
tree | e53a4020b24114fb2eccd2bf0785e92af6b8188f | |
parent | cc4e47233bc0bf0f775dcde03cc310b72bc2ccda (diff) | |
parent | e3ec31fd2d0cb4d8f29f890f7f4265bf20858fa7 (diff) | |
download | sdl_android-ac66a7929e61274efb3faa1c0746a654051c7d41.tar.gz |
Merge pull request #1188 from smartdevicelink/feature/SDL-0243-DisplayCap
SDL 0243 Manager Update for DisplayCapability
45 files changed, 557 insertions, 288 deletions
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java index 96d78584d..b1a0ba26e 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java @@ -20,8 +20,6 @@ import com.smartdevicelink.proxy.rpc.enums.StaticIconName; import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener; import com.smartdevicelink.test.Test; -import junit.framework.Assert; - import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java index 3664d416f..514549080 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java @@ -12,6 +12,8 @@ import com.smartdevicelink.proxy.rpc.Image; import com.smartdevicelink.proxy.rpc.OnHMIStatus; import com.smartdevicelink.proxy.rpc.Show; import com.smartdevicelink.proxy.rpc.SoftButton; +import com.smartdevicelink.proxy.rpc.SoftButtonCapabilities; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.FileType; import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.ImageType; @@ -131,6 +133,12 @@ public class SoftButtonManagerTests extends AndroidTestCase2 { internalInterfaceSendRPCGotCalled = false; softButtonMangerUpdateCompleted = false; + SoftButtonCapabilities softCap = new SoftButtonCapabilities(); + softCap.setImageSupported(true); + WindowCapability defaultCap = new WindowCapability(); + defaultCap.setSoftButtonCapabilities(Collections.singletonList(softCap)); + softButtonManager.defaultMainWindowCapability = defaultCap; + // Test batch update softButtonManager.setBatchUpdates(true); @@ -151,7 +159,8 @@ public class SoftButtonManagerTests extends AndroidTestCase2 { // Check that everything got called as expected - assertTrue("FileManager.uploadArtworks() did not get called", fileManagerUploadArtworksGotCalled); + + assertTrue("FileManager.uploadArtworks() did get called", fileManagerUploadArtworksGotCalled); assertTrue("InternalInterface.sendRPC() did not get called", internalInterfaceSendRPCGotCalled); assertTrue("SoftButtonManger update onComplete() did not get called", softButtonMangerUpdateCompleted); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java index d7b788a90..3597c33f5 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java @@ -8,10 +8,10 @@ import com.smartdevicelink.managers.BaseSubManager; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.managers.file.filetypes.SdlArtwork; import com.smartdevicelink.proxy.interfaces.ISdl; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; import com.smartdevicelink.proxy.rpc.MetadataTags; import com.smartdevicelink.proxy.rpc.Show; import com.smartdevicelink.proxy.rpc.TextField; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.FileType; import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.MetadataType; @@ -58,7 +58,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { super.tearDown(); } - private DisplayCapabilities getDisplayCapability(int numberOfMainFields){ + private WindowCapability getWindowCapability(int numberOfMainFields){ TextField mainField1 = new TextField(); mainField1.setName(TextFieldName.mainField1); @@ -84,10 +84,10 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { } } - DisplayCapabilities displayCapabilities = new DisplayCapabilities(); - displayCapabilities.setTextFields(returnList); + WindowCapability windowCapability = new WindowCapability(); + windowCapability.setTextFields(returnList); - return displayCapabilities; + return windowCapability; } public void testInstantiation(){ @@ -110,7 +110,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { assertNull(textAndGraphicManager.inProgressUpdate); assertNull(textAndGraphicManager.queuedImageUpdate); assertFalse(textAndGraphicManager.hasQueuedUpdate); - assertNull(textAndGraphicManager.displayCapabilities); + assertNull(textAndGraphicManager.defaultMainWindowCapability); assertEquals(textAndGraphicManager.currentHMILevel, HMILevel.HMI_NONE); assertFalse(textAndGraphicManager.isDirty); assertEquals(textAndGraphicManager.getState(), BaseSubManager.SETTING_UP); @@ -126,7 +126,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { // The tests.java class has an example of this, but we must build it to do what // we need it to do. Build display cap w/ 3 main fields and test that it returns 3 - textAndGraphicManager.displayCapabilities = getDisplayCapability(3); + textAndGraphicManager.defaultMainWindowCapability = getWindowCapability(3); assertEquals(textAndGraphicManager.getNumberOfLines(), 3); } @@ -135,7 +135,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { Show inputShow = new Show(); // Force it to return display with support for only 1 line of text - textAndGraphicManager.displayCapabilities = getDisplayCapability(1); + textAndGraphicManager.defaultMainWindowCapability = getWindowCapability(1); textAndGraphicManager.setTextField1("It is"); textAndGraphicManager.setTextField1Type(MetadataType.HUMIDITY); @@ -185,7 +185,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { Show inputShow = new Show(); // Force it to return display with support for only 2 lines of text - textAndGraphicManager.displayCapabilities = getDisplayCapability(2); + textAndGraphicManager.defaultMainWindowCapability = getWindowCapability(2); textAndGraphicManager.setTextField1("It is"); textAndGraphicManager.setTextField1Type(MetadataType.HUMIDITY); @@ -282,7 +282,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { Show inputShow = new Show(); // Force it to return display with support for only 3 lines of text - textAndGraphicManager.displayCapabilities = getDisplayCapability(3); + textAndGraphicManager.defaultMainWindowCapability = getWindowCapability(3); textAndGraphicManager.setTextField1("It is"); textAndGraphicManager.setTextField1Type(MetadataType.HUMIDITY); @@ -375,7 +375,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { Show inputShow = new Show(); // Force it to return display with support for only 4 lines of text - textAndGraphicManager.displayCapabilities = getDisplayCapability(4); + textAndGraphicManager.defaultMainWindowCapability = getWindowCapability(4); textAndGraphicManager.setTextField1("It is"); textAndGraphicManager.setTextField1Type(MetadataType.HUMIDITY); @@ -548,7 +548,7 @@ public class TextAndGraphicManagerTests extends AndroidTestCase2 { assertNull(textAndGraphicManager.inProgressUpdate); assertNull(textAndGraphicManager.queuedImageUpdate); assertFalse(textAndGraphicManager.hasQueuedUpdate); - assertNull(textAndGraphicManager.displayCapabilities); + assertNull(textAndGraphicManager.defaultMainWindowCapability); assertFalse(textAndGraphicManager.isDirty); assertEquals(textAndGraphicManager.getState(), BaseSubManager.SHUTDOWN); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/CheckChoiceVROptionalOperationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/CheckChoiceVROptionalOperationTests.java index a47528348..7b9696151 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/CheckChoiceVROptionalOperationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/CheckChoiceVROptionalOperationTests.java @@ -36,8 +36,6 @@ package com.smartdevicelink.managers.screen.choiceset; import com.smartdevicelink.AndroidTestCase2; -import com.smartdevicelink.managers.screen.choiceset.CheckChoiceVROptionalInterface; -import com.smartdevicelink.managers.screen.choiceset.CheckChoiceVROptionalOperation; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.rpc.Choice; import com.smartdevicelink.proxy.rpc.CreateInteractionChoiceSet; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManagerTests.java index b8af1a68c..1a9efffbe 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManagerTests.java @@ -85,7 +85,7 @@ public class ChoiceSetManagerTests extends AndroidTestCase2 { assertNotNull(csm.operationQueue); assertNotNull(csm.executor); assertNotNull(csm.hmiListener); - assertNotNull(csm.displayListener); + assertNotNull(csm.onDisplayCapabilityListener); assertNull(csm.pendingPresentOperation); } @@ -96,7 +96,7 @@ public class ChoiceSetManagerTests extends AndroidTestCase2 { assertNull(csm.currentHMILevel); assertNull(csm.currentSystemContext); - assertNull(csm.displayCapabilities); + assertNull(csm.defaultMainWindowCapability); assertNull(csm.pendingPresentationSet); assertNull(csm.pendingPresentOperation); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/DeleteChoicesOperationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/DeleteChoicesOperationTests.java index 3a9eed394..67200d0fe 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/DeleteChoicesOperationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/DeleteChoicesOperationTests.java @@ -36,8 +36,6 @@ package com.smartdevicelink.managers.screen.choiceset; import com.smartdevicelink.AndroidTestCase2; -import com.smartdevicelink.managers.screen.choiceset.ChoiceCell; -import com.smartdevicelink.managers.screen.choiceset.DeleteChoicesOperation; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.rpc.DeleteInteractionChoiceSet; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperationTests.java index 514d88bca..b29863110 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperationTests.java @@ -38,15 +38,14 @@ package com.smartdevicelink.managers.screen.choiceset; import com.smartdevicelink.AndroidTestCase2; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.managers.file.filetypes.SdlArtwork; -import com.smartdevicelink.managers.screen.choiceset.ChoiceCell; -import com.smartdevicelink.managers.screen.choiceset.PreloadChoicesOperation; import com.smartdevicelink.proxy.interfaces.ISdl; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; import com.smartdevicelink.proxy.rpc.ImageField; import com.smartdevicelink.proxy.rpc.TextField; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.CharacterSet; import com.smartdevicelink.proxy.rpc.enums.FileType; import com.smartdevicelink.proxy.rpc.enums.ImageFieldName; +import com.smartdevicelink.proxy.rpc.enums.ImageType; import com.smartdevicelink.proxy.rpc.enums.TextFieldName; import com.smartdevicelink.test.Test; @@ -75,14 +74,14 @@ public class PreloadChoicesOperationTests extends AndroidTestCase2 { ImageField imageField = new ImageField(ImageFieldName.choiceImage, Arrays.asList(FileType.GRAPHIC_PNG, FileType.GRAPHIC_JPEG)); TextField textField = new TextField(TextFieldName.menuName, CharacterSet.CID1SET, 2, 2); - DisplayCapabilities displayCapabilities = new DisplayCapabilities(); - displayCapabilities.setGraphicSupported(true); - displayCapabilities.setImageFields(Collections.singletonList(imageField)); - displayCapabilities.setTextFields(Collections.singletonList(textField)); + WindowCapability windowCapability = new WindowCapability(); + windowCapability.setImageFields(Collections.singletonList(imageField)); + windowCapability.setImageTypeSupported(Arrays.asList(ImageType.STATIC, ImageType.DYNAMIC)); + windowCapability.setTextFields(Collections.singletonList(textField)); ISdl internalInterface = mock(ISdl.class); FileManager fileManager = mock(FileManager.class); - preloadChoicesOperation = new PreloadChoicesOperation(internalInterface, fileManager, displayCapabilities, true, cellsToPreload, null); + preloadChoicesOperation = new PreloadChoicesOperation(internalInterface, fileManager, windowCapability, true, cellsToPreload, null); } @Override @@ -91,13 +90,6 @@ public class PreloadChoicesOperationTests extends AndroidTestCase2 { } public void testHasTextFieldOfName(){ - - TextField textField = new TextField(); - textField.setName(TextFieldName.secondaryText); - - DisplayCapabilities capabilities = new DisplayCapabilities(); - capabilities.setTextFields(Collections.singletonList(textField)); - boolean test = preloadChoicesOperation.hasTextFieldOfName(TextFieldName.secondaryText); assertFalse(test); @@ -106,13 +98,6 @@ public class PreloadChoicesOperationTests extends AndroidTestCase2 { } public void testHasImageFieldOfName(){ - - ImageField imageField = new ImageField(); - imageField.setName(ImageFieldName.choiceImage); - - DisplayCapabilities capabilities = new DisplayCapabilities(); - capabilities.setImageFields(Collections.singletonList(imageField)); - boolean test = preloadChoicesOperation.hasImageFieldOfName(ImageFieldName.choiceImage); assertTrue(test); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuCellTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuCellTests.java index 6aa9b479a..f19fb4a6b 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuCellTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuCellTests.java @@ -33,7 +33,6 @@ package com.smartdevicelink.managers.screen.menu; import com.smartdevicelink.AndroidTestCase2; -import com.smartdevicelink.proxy.rpc.enums.MenuLayout; import com.smartdevicelink.proxy.rpc.enums.TriggerSource; import com.smartdevicelink.test.Test; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java index fe20383a0..a5dfa9037 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/menu/MenuManagerTests.java @@ -142,7 +142,7 @@ public class MenuManagerTests extends AndroidTestCase2 { assertNull(menuManager.menuConfiguration); assertNotNull(menuManager.hmiListener); assertNotNull(menuManager.commandListener); - assertNotNull(menuManager.displayListener); + assertNotNull(menuManager.onDisplaysCapabilityListener); } @@ -157,7 +157,7 @@ public class MenuManagerTests extends AndroidTestCase2 { assertNull(menuManager.menuCells); assertNull(menuManager.oldMenuCells); assertNull(menuManager.currentHMILevel); - assertNull(menuManager.displayCapabilities); + assertNull(menuManager.defaultMainWindowCapability); assertNull(menuManager.inProgressUpdate); assertNull(menuManager.waitingUpdateMenuCells); assertNull(menuManager.keepsNew); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java index f456b33b3..34a452f06 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java @@ -34,7 +34,6 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.nio.ByteBuffer; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java index 7e3b50a61..09c0631b9 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java @@ -5,105 +5,7 @@ import com.smartdevicelink.protocol.enums.FrameData; import com.smartdevicelink.protocol.enums.FrameDataControlFrameType; import com.smartdevicelink.protocol.enums.FrameType; import com.smartdevicelink.protocol.enums.SessionType; -import com.smartdevicelink.proxy.rpc.AirbagStatus; -import com.smartdevicelink.proxy.rpc.AppServiceCapability; -import com.smartdevicelink.proxy.rpc.AppServiceManifest; -import com.smartdevicelink.proxy.rpc.AppServiceRecord; -import com.smartdevicelink.proxy.rpc.AppServicesCapabilities; -import com.smartdevicelink.proxy.rpc.AudioControlCapabilities; -import com.smartdevicelink.proxy.rpc.AudioControlData; -import com.smartdevicelink.proxy.rpc.AudioPassThruCapabilities; -import com.smartdevicelink.proxy.rpc.BeltStatus; -import com.smartdevicelink.proxy.rpc.BodyInformation; -import com.smartdevicelink.proxy.rpc.ButtonCapabilities; -import com.smartdevicelink.proxy.rpc.Choice; -import com.smartdevicelink.proxy.rpc.ClimateControlCapabilities; -import com.smartdevicelink.proxy.rpc.ClimateControlData; -import com.smartdevicelink.proxy.rpc.ClusterModeStatus; -import com.smartdevicelink.proxy.rpc.Coordinate; -import com.smartdevicelink.proxy.rpc.DIDResult; -import com.smartdevicelink.proxy.rpc.DateTime; -import com.smartdevicelink.proxy.rpc.DeviceInfo; -import com.smartdevicelink.proxy.rpc.DeviceStatus; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; -import com.smartdevicelink.proxy.rpc.DisplayCapability; -import com.smartdevicelink.proxy.rpc.ECallInfo; -import com.smartdevicelink.proxy.rpc.EmergencyEvent; -import com.smartdevicelink.proxy.rpc.EqualizerSettings; -import com.smartdevicelink.proxy.rpc.FuelRange; -import com.smartdevicelink.proxy.rpc.GPSData; -import com.smartdevicelink.proxy.rpc.Grid; -import com.smartdevicelink.proxy.rpc.HMICapabilities; -import com.smartdevicelink.proxy.rpc.HMIPermissions; -import com.smartdevicelink.proxy.rpc.HMISettingsControlCapabilities; -import com.smartdevicelink.proxy.rpc.HMISettingsControlData; -import com.smartdevicelink.proxy.rpc.HeadLampStatus; -import com.smartdevicelink.proxy.rpc.Headers; -import com.smartdevicelink.proxy.rpc.Image; -import com.smartdevicelink.proxy.rpc.ImageField; -import com.smartdevicelink.proxy.rpc.ImageResolution; -import com.smartdevicelink.proxy.rpc.KeyboardProperties; -import com.smartdevicelink.proxy.rpc.LightCapabilities; -import com.smartdevicelink.proxy.rpc.LightControlCapabilities; -import com.smartdevicelink.proxy.rpc.LightControlData; -import com.smartdevicelink.proxy.rpc.LightState; -import com.smartdevicelink.proxy.rpc.LocationDetails; -import com.smartdevicelink.proxy.rpc.MassageCushionFirmness; -import com.smartdevicelink.proxy.rpc.MassageModeData; -import com.smartdevicelink.proxy.rpc.MediaServiceData; -import com.smartdevicelink.proxy.rpc.MediaServiceManifest; -import com.smartdevicelink.proxy.rpc.MenuParams; -import com.smartdevicelink.proxy.rpc.ModuleData; -import com.smartdevicelink.proxy.rpc.ModuleInfo; -import com.smartdevicelink.proxy.rpc.MyKey; -import com.smartdevicelink.proxy.rpc.NavigationCapability; -import com.smartdevicelink.proxy.rpc.NavigationInstruction; -import com.smartdevicelink.proxy.rpc.NavigationServiceData; -import com.smartdevicelink.proxy.rpc.NavigationServiceManifest; -import com.smartdevicelink.proxy.rpc.OasisAddress; -import com.smartdevicelink.proxy.rpc.ParameterPermissions; -import com.smartdevicelink.proxy.rpc.PermissionItem; -import com.smartdevicelink.proxy.rpc.PhoneCapability; -import com.smartdevicelink.proxy.rpc.PresetBankCapabilities; -import com.smartdevicelink.proxy.rpc.RGBColor; -import com.smartdevicelink.proxy.rpc.RadioControlCapabilities; -import com.smartdevicelink.proxy.rpc.RadioControlData; -import com.smartdevicelink.proxy.rpc.RdsData; -import com.smartdevicelink.proxy.rpc.Rectangle; -import com.smartdevicelink.proxy.rpc.RemoteControlCapabilities; -import com.smartdevicelink.proxy.rpc.ScreenParams; -import com.smartdevicelink.proxy.rpc.SdlMsgVersion; -import com.smartdevicelink.proxy.rpc.SeatControlCapabilities; -import com.smartdevicelink.proxy.rpc.SeatControlData; -import com.smartdevicelink.proxy.rpc.SeatLocation; -import com.smartdevicelink.proxy.rpc.SeatMemoryAction; -import com.smartdevicelink.proxy.rpc.SingleTireStatus; -import com.smartdevicelink.proxy.rpc.SisData; -import com.smartdevicelink.proxy.rpc.SoftButton; -import com.smartdevicelink.proxy.rpc.SoftButtonCapabilities; -import com.smartdevicelink.proxy.rpc.StartTime; -import com.smartdevicelink.proxy.rpc.StationIDNumber; -import com.smartdevicelink.proxy.rpc.TTSChunk; -import com.smartdevicelink.proxy.rpc.Temperature; -import com.smartdevicelink.proxy.rpc.TemplateColorScheme; -import com.smartdevicelink.proxy.rpc.TemplateConfiguration; -import com.smartdevicelink.proxy.rpc.TextField; -import com.smartdevicelink.proxy.rpc.TireStatus; -import com.smartdevicelink.proxy.rpc.TouchCoord; -import com.smartdevicelink.proxy.rpc.TouchEvent; -import com.smartdevicelink.proxy.rpc.TouchEventCapabilities; -import com.smartdevicelink.proxy.rpc.Turn; -import com.smartdevicelink.proxy.rpc.VehicleDataResult; -import com.smartdevicelink.proxy.rpc.VehicleType; -import com.smartdevicelink.proxy.rpc.VideoStreamingCapability; -import com.smartdevicelink.proxy.rpc.VideoStreamingFormat; -import com.smartdevicelink.proxy.rpc.VrHelpItem; -import com.smartdevicelink.proxy.rpc.WeatherAlert; -import com.smartdevicelink.proxy.rpc.WeatherData; -import com.smartdevicelink.proxy.rpc.WeatherServiceData; -import com.smartdevicelink.proxy.rpc.WeatherServiceManifest; -import com.smartdevicelink.proxy.rpc.WindowCapability; -import com.smartdevicelink.proxy.rpc.WindowTypeCapabilities; +import com.smartdevicelink.proxy.rpc.*; import com.smartdevicelink.proxy.rpc.enums.AppServiceType; import com.smartdevicelink.proxy.rpc.enums.DefrostZone; import com.smartdevicelink.proxy.rpc.enums.FileType; @@ -2846,6 +2748,24 @@ public class Validator{ return true; } + public static boolean validateDisplayCapabilityList(List<DisplayCapability> list1, List<DisplayCapability> list2) { + if (list1 == null || list2 == null) { + return false; + } + + if (list1.size() != list2.size()) { + return false; + } + + for (int i = 0; i < list1.size(); i++) { + if (!validateDisplayCapability(list1.get(i), list2.get(i))) { + return false; + } + } + + return true; + } + public static boolean validateDisplayCapability(DisplayCapability item1, DisplayCapability item2) { if (item1 == null) { return (item2 == null); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java index dbd54b0c4..0d1fa04bf 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java @@ -18,6 +18,7 @@ import com.smartdevicelink.proxy.rpc.AppServicesCapabilities; import com.smartdevicelink.proxy.rpc.AudioPassThruCapabilities; import com.smartdevicelink.proxy.rpc.ButtonCapabilities; import com.smartdevicelink.proxy.rpc.DisplayCapabilities; +import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse; import com.smartdevicelink.proxy.rpc.HMICapabilities; import com.smartdevicelink.proxy.rpc.OnSystemCapabilityUpdated; @@ -25,15 +26,24 @@ import com.smartdevicelink.proxy.rpc.PhoneCapability; import com.smartdevicelink.proxy.rpc.PresetBankCapabilities; import com.smartdevicelink.proxy.rpc.RegisterAppInterfaceResponse; import com.smartdevicelink.proxy.rpc.SdlMsgVersion; +import com.smartdevicelink.proxy.rpc.SetDisplayLayoutResponse; import com.smartdevicelink.proxy.rpc.SoftButtonCapabilities; import com.smartdevicelink.proxy.rpc.SystemCapability; import com.smartdevicelink.proxy.rpc.VideoStreamingCapability; +import com.smartdevicelink.proxy.rpc.WindowCapability; +import com.smartdevicelink.proxy.rpc.WindowTypeCapabilities; import com.smartdevicelink.proxy.rpc.enums.AppServiceType; +import com.smartdevicelink.proxy.rpc.enums.DisplayType; import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities; +import com.smartdevicelink.proxy.rpc.enums.ImageType; +import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat; +import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows; import com.smartdevicelink.proxy.rpc.enums.PrerecordedSpeech; +import com.smartdevicelink.proxy.rpc.enums.Result; import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason; import com.smartdevicelink.proxy.rpc.enums.SpeechCapabilities; import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; +import com.smartdevicelink.proxy.rpc.enums.WindowType; import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener; import com.smartdevicelink.proxy.rpc.listeners.OnRPCListener; import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; @@ -47,6 +57,7 @@ import com.smartdevicelink.test.utl.AppServiceFactory; import com.smartdevicelink.util.CorrelationIdGenerator; import com.smartdevicelink.util.Version; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -89,9 +100,58 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { return systemCapabilityManager; } + private List<DisplayCapability> createDisplayCapabilityList(DisplayCapabilities display, List<ButtonCapabilities> button, List<SoftButtonCapabilities> softButton) { + WindowTypeCapabilities windowTypeCapabilities = new WindowTypeCapabilities(WindowType.MAIN, 1); + + DisplayCapability displayCapability = new DisplayCapability(); + displayCapability.setDisplayName(display != null ? display.getDisplayName() : null); + displayCapability.setWindowTypeSupported(Collections.singletonList(windowTypeCapabilities)); + + WindowCapability defaultWindowCapability = new WindowCapability(); + defaultWindowCapability.setWindowID(PredefinedWindows.DEFAULT_WINDOW.getValue()); + defaultWindowCapability.setButtonCapabilities(button); + defaultWindowCapability.setSoftButtonCapabilities(softButton); + + if (display == null) { + displayCapability.setWindowCapabilities(Collections.singletonList(defaultWindowCapability)); + return Collections.singletonList(displayCapability); + } + + defaultWindowCapability.setTemplatesAvailable(display.getTemplatesAvailable()); + defaultWindowCapability.setNumCustomPresetsAvailable(display.getNumCustomPresetsAvailable()); + defaultWindowCapability.setTextFields(display.getTextFields()); + defaultWindowCapability.setImageFields(display.getImageFields()); + ArrayList<ImageType> imageTypeSupported = new ArrayList<>(); + imageTypeSupported.add(ImageType.STATIC); + if (display.getGraphicSupported()) { + imageTypeSupported.add(ImageType.DYNAMIC); + } + defaultWindowCapability.setImageTypeSupported(imageTypeSupported); + + displayCapability.setWindowCapabilities(Collections.singletonList(defaultWindowCapability)); + return Collections.singletonList(displayCapability); + } + + private DisplayCapabilities createDisplayCapabilities(String displayName, WindowCapability defaultMainWindow) { + DisplayCapabilities convertedCapabilities = new DisplayCapabilities(); + convertedCapabilities.setDisplayType(DisplayType.SDL_GENERIC); //deprecated but it is mandatory... + convertedCapabilities.setDisplayName(displayName); + convertedCapabilities.setTextFields(defaultMainWindow.getTextFields()); + convertedCapabilities.setImageFields(defaultMainWindow.getImageFields()); + convertedCapabilities.setTemplatesAvailable(defaultMainWindow.getTemplatesAvailable()); + convertedCapabilities.setNumCustomPresetsAvailable(defaultMainWindow.getNumCustomPresetsAvailable()); + convertedCapabilities.setMediaClockFormats(new ArrayList<MediaClockFormat>()); // mandatory field but can be empty + convertedCapabilities.setGraphicSupported(defaultMainWindow.getImageTypeSupported().contains(ImageType.DYNAMIC)); + + return convertedCapabilities; + } + public void testParseRAI() { systemCapabilityManager = createSampleManager(); + List<DisplayCapability> displayCapabilityList = createDisplayCapabilityList(Test.GENERAL_DISPLAYCAPABILITIES, Test.GENERAL_BUTTONCAPABILITIES_LIST, Test.GENERAL_SOFTBUTTONCAPABILITIES_LIST); + assertTrue(Test.TRUE, + Validator.validateDisplayCapabilityList(displayCapabilityList, (List<DisplayCapability>) systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAYS))); assertTrue(Test.TRUE, Validator.validateHMICapabilities(Test.GENERAL_HMICAPABILITIES, (HMICapabilities) systemCapabilityManager.getCapability(SystemCapabilityType.HMI))); assertTrue(Test.TRUE, @@ -189,7 +249,36 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { scmRpcListener.onReceived(onSystemCapabilityUpdated); assertNotNull(systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES)); + } + + public void testOnSystemCapabilityUpdatedForDISPLAYS() { + InternalSDLInterface iSDL = new InternalSDLInterface(); + SystemCapabilityManager systemCapabilityManager = createSampleManager(iSDL); + OnRPCListener scmRpcListener = iSDL.rpcListeners.get(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED.getId()).get(0); + assertNotNull(scmRpcListener); + + assertNotNull(systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAYS)); + assertNotNull(systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAY)); + List<DisplayCapability> newCaps = createDisplayCapabilityList(Test.GENERAL_DISPLAYCAPABILITIES, Test.GENERAL_BUTTONCAPABILITIES_LIST, Test.GENERAL_SOFTBUTTONCAPABILITIES_LIST);; + + SystemCapability systemCapability = new SystemCapability(); + systemCapability.setSystemCapabilityType(SystemCapabilityType.DISPLAYS); + systemCapability.setCapabilityForType(SystemCapabilityType.DISPLAYS, newCaps); + + OnSystemCapabilityUpdated onSystemCapabilityUpdated = new OnSystemCapabilityUpdated(); + onSystemCapabilityUpdated.setSystemCapability(systemCapability); + + scmRpcListener.onReceived(onSystemCapabilityUpdated); + + List<DisplayCapability> appliedCaps = (List<DisplayCapability>)systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAYS); + assertNotNull(appliedCaps); + assertTrue(Validator.validateDisplayCapabilityList(newCaps, appliedCaps)); + + DisplayCapabilities appliedConvertedCaps = (DisplayCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAY); + assertNotNull(appliedConvertedCaps); + DisplayCapabilities testConvertedCaps = createDisplayCapabilities(newCaps.get(0).getDisplayName(), newCaps.get(0).getWindowCapabilities().get(0)); + assertTrue(Validator.validateDisplayCapabilities(appliedConvertedCaps, testConvertedCaps)); } public void testOnSystemCapabilityUpdated(){ @@ -329,6 +418,46 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { assertEquals(phoneCapability, phoneCapabilityUpdated); } + public void testOnSetDisplayLayout() { + InternalSDLInterface iSDL = new InternalSDLInterface(); + SystemCapabilityManager systemCapabilityManager = createSampleManager(iSDL); + OnRPCListener dlRpcListener = iSDL.rpcListeners.get(FunctionID.SET_DISPLAY_LAYOUT.getId()).get(0); + assertNotNull(dlRpcListener); + + SetDisplayLayoutResponse newLayout = new SetDisplayLayoutResponse(); + newLayout.setDisplayCapabilities(Test.GENERAL_DISPLAYCAPABILITIES); + newLayout.setButtonCapabilities(Test.GENERAL_BUTTONCAPABILITIES_LIST); + newLayout.setSoftButtonCapabilities(Test.GENERAL_SOFTBUTTONCAPABILITIES_LIST); + newLayout.setPresetBankCapabilities(Test.GENERAL_PRESETBANKCAPABILITIES); + newLayout.setSuccess(true); + newLayout.setResultCode(Result.SUCCESS); + + dlRpcListener.onReceived(newLayout); + + + DisplayCapabilities appliedCaps = (DisplayCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAY); + assertNotNull(appliedCaps); + assertTrue(Validator.validateDisplayCapabilities(newLayout.getDisplayCapabilities(), appliedCaps)); + + List<DisplayCapability> convertedCaps = (List<DisplayCapability>)systemCapabilityManager.getCapability(SystemCapabilityType.DISPLAYS); + assertNotNull(convertedCaps); + List<DisplayCapability> testCaps = createDisplayCapabilityList(newLayout.getDisplayCapabilities(), newLayout.getButtonCapabilities(), newLayout.getSoftButtonCapabilities()); + assertTrue(Validator.validateDisplayCapabilityList(convertedCaps, testCaps)); + + WindowCapability matchWindowCapability = testCaps.get(0).getWindowCapabilities().get(0); + WindowCapability testWindowCapability = systemCapabilityManager.getDefaultMainWindowCapability(); + assertTrue(Validator.validateWindowCapability(matchWindowCapability, testWindowCapability)); + assertNull(systemCapabilityManager.getWindowCapability(42)); + } + + public void testManagerBeforeDisplayUpdate() { + InternalSDLInterface iSDL = new InternalSDLInterface(); + SystemCapabilityManager systemCapabilityManager = new SystemCapabilityManager(iSDL); + assertNull(systemCapabilityManager.getDefaultMainWindowCapability()); + assertNull(systemCapabilityManager.getWindowCapability(PredefinedWindows.DEFAULT_WINDOW.getValue())); + assertNull(systemCapabilityManager.getWindowCapability(PredefinedWindows.PRIMARY_WIDGET.getValue())); + } + private class InternalSDLInterface implements ISdl{ private final Object RPC_LISTENER_LOCK = new Object(); SparseArray<CopyOnWriteArrayList<OnRPCListener>> rpcListeners = new SparseArray<>(); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/DisplayCapabilitiesTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/DisplayCapabilitiesTests.java index 28d7e1460..4f0256f79 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/DisplayCapabilitiesTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/DisplayCapabilitiesTests.java @@ -7,7 +7,6 @@ import com.smartdevicelink.proxy.rpc.ScreenParams; import com.smartdevicelink.proxy.rpc.TextField; import com.smartdevicelink.proxy.rpc.enums.DisplayType; import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat; -import com.smartdevicelink.proxy.rpc.enums.MenuLayout; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.Validator; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SystemCapabilityTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SystemCapabilityTests.java index c6a3cfa0e..203f72060 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SystemCapabilityTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SystemCapabilityTests.java @@ -13,10 +13,13 @@ import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.Validator; + import junit.framework.TestCase; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; + import java.util.Hashtable; import java.util.Iterator; import java.util.List; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/TemplateConfigurationTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/TemplateConfigurationTests.java index fe505218c..4fc3744be 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/TemplateConfigurationTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/TemplateConfigurationTests.java @@ -6,9 +6,12 @@ import com.smartdevicelink.proxy.rpc.TemplateConfiguration; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.Validator; + import junit.framework.TestCase; + import org.json.JSONException; import org.json.JSONObject; + import java.util.Hashtable; import java.util.Iterator; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowCapabilityTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowCapabilityTests.java index 973c6e0b8..550231452 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowCapabilityTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowCapabilityTests.java @@ -11,7 +11,9 @@ import com.smartdevicelink.proxy.rpc.enums.MenuLayout; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.Validator; + import junit.framework.TestCase; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowTypeCapabilitiesTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowTypeCapabilitiesTest.java index 4b9c767e3..539737554 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowTypeCapabilitiesTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/WindowTypeCapabilitiesTest.java @@ -4,9 +4,12 @@ import com.smartdevicelink.proxy.rpc.WindowTypeCapabilities; import com.smartdevicelink.proxy.rpc.enums.WindowType; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; + import junit.framework.TestCase; + import org.json.JSONException; import org.json.JSONObject; + import java.util.Iterator; public class WindowTypeCapabilitiesTest extends TestCase { diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/PredefinedWindowsTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/PredefinedWindowsTests.java index 3b37070b7..eae294933 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/PredefinedWindowsTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/PredefinedWindowsTests.java @@ -1,7 +1,9 @@ package com.smartdevicelink.test.rpc.enums; import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows; + import junit.framework.TestCase; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/WindowTypeTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/WindowTypeTests.java index b6e26f9df..c3c78c870 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/WindowTypeTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/WindowTypeTests.java @@ -1,7 +1,9 @@ package com.smartdevicelink.test.rpc.enums; import com.smartdevicelink.proxy.rpc.enums.WindowType; + import junit.framework.TestCase; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/CreateWindowTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/CreateWindowTests.java index dd8264caf..267be01f1 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/CreateWindowTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/CreateWindowTests.java @@ -9,8 +9,10 @@ import com.smartdevicelink.test.BaseRpcTests; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.json.rpc.JsonFileReader; + import org.json.JSONException; import org.json.JSONObject; + import java.util.Hashtable; /** diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/DeleteWindowTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/DeleteWindowTests.java index 3602d2d62..48080615f 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/DeleteWindowTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/DeleteWindowTests.java @@ -8,8 +8,10 @@ import com.smartdevicelink.test.BaseRpcTests; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.json.rpc.JsonFileReader; + import org.json.JSONException; import org.json.JSONObject; + import java.util.Hashtable; /** diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetInteriorVehicleDataConsentTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetInteriorVehicleDataConsentTests.java index d736e5176..15a902a84 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetInteriorVehicleDataConsentTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetInteriorVehicleDataConsentTests.java @@ -10,7 +10,6 @@ import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.json.rpc.JsonFileReader; - import org.json.JSONException; import org.json.JSONObject; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CloseApplicationResponseTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CloseApplicationResponseTests.java index dac0190c7..eb56a5293 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CloseApplicationResponseTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CloseApplicationResponseTests.java @@ -38,7 +38,6 @@ import com.smartdevicelink.marshal.JsonRPCMarshaller; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.RPCMessage; import com.smartdevicelink.proxy.rpc.CloseApplicationResponse; -import com.smartdevicelink.proxy.rpc.UnregisterAppInterfaceResponse; import com.smartdevicelink.test.BaseRpcTests; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CreateWindowResponseTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CreateWindowResponseTest.java index 6bbdb1e6b..8099a9ce7 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CreateWindowResponseTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/CreateWindowResponseTest.java @@ -8,8 +8,10 @@ import com.smartdevicelink.test.BaseRpcTests; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.json.rpc.JsonFileReader; + import org.json.JSONException; import org.json.JSONObject; + import java.util.Hashtable; /** diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/DeleteWindowResponseTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/DeleteWindowResponseTest.java index 145f432f3..01bcd1491 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/DeleteWindowResponseTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/DeleteWindowResponseTest.java @@ -8,8 +8,10 @@ import com.smartdevicelink.test.BaseRpcTests; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.json.rpc.JsonFileReader; + import org.json.JSONException; import org.json.JSONObject; + import java.util.Hashtable; /** diff --git a/android/sdl_android/src/test/java/com/smartdevicelink/streaming/video/VideoStreamingParametersTest.java b/android/sdl_android/src/test/java/com/smartdevicelink/streaming/video/VideoStreamingParametersTest.java index 9088e716d..f08bada0f 100644 --- a/android/sdl_android/src/test/java/com/smartdevicelink/streaming/video/VideoStreamingParametersTest.java +++ b/android/sdl_android/src/test/java/com/smartdevicelink/streaming/video/VideoStreamingParametersTest.java @@ -37,7 +37,7 @@ import com.smartdevicelink.proxy.rpc.VideoStreamingCapability; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class VideoStreamingParametersTest { private VideoStreamingParameters params; diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/BaseSoftButtonManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/BaseSoftButtonManager.java index 54a851684..dd20f342a 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/BaseSoftButtonManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/BaseSoftButtonManager.java @@ -42,15 +42,16 @@ import com.smartdevicelink.managers.file.filetypes.SdlArtwork; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.RPCNotification; import com.smartdevicelink.proxy.RPCResponse; +import com.smartdevicelink.proxy.SystemCapabilityManager; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; +import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.OnButtonEvent; import com.smartdevicelink.proxy.rpc.OnButtonPress; import com.smartdevicelink.proxy.rpc.OnHMIStatus; import com.smartdevicelink.proxy.rpc.Show; import com.smartdevicelink.proxy.rpc.SoftButton; -import com.smartdevicelink.proxy.rpc.SoftButtonCapabilities; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.ButtonName; import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows; @@ -77,14 +78,13 @@ abstract class BaseSoftButtonManager extends BaseSubManager { private static final String TAG = "SoftButtonManager"; private WeakReference<FileManager> fileManager; - private DisplayCapabilities displayCapabilities; - private SoftButtonCapabilities softButtonCapabilities; + WindowCapability defaultMainWindowCapability; private CopyOnWriteArrayList<SoftButtonObject> softButtonObjects; private HMILevel currentHMILevel; private Show inProgressShowRPC; private CompletionListener inProgressListener, queuedUpdateListener, cachedListener; private boolean hasQueuedUpdate, batchUpdates, waitingOnHMILevelUpdateToSetButtons; - private final OnSystemCapabilityListener onSoftButtonCapabilitiesListener, onDisplayCapabilitiesListener; + private final OnSystemCapabilityListener onDisplayCapabilityListener; private final OnRPCNotificationListener onHMIStatusListener, onButtonPressListener, onButtonEventListener; private final SoftButtonObject.UpdateListener updateListener; @@ -99,7 +99,7 @@ abstract class BaseSoftButtonManager extends BaseSubManager { * @param internalInterface an instance of the ISdl interface that can be used for common SDL operations (sendRpc, addRpcListener, etc) * @param fileManager an instance of the FileManager so that button graphics can be sent */ - BaseSoftButtonManager(@NonNull ISdl internalInterface, @NonNull FileManager fileManager) { + BaseSoftButtonManager(@NonNull final ISdl internalInterface, @NonNull FileManager fileManager) { super(internalInterface); this.fileManager = new WeakReference<>(fileManager); this.softButtonObjects = new CopyOnWriteArrayList<>(); @@ -114,41 +114,31 @@ abstract class BaseSoftButtonManager extends BaseSubManager { // Add OnSoftButtonCapabilitiesListener to keep softButtonCapabilities updated - onSoftButtonCapabilitiesListener = new OnSystemCapabilityListener() { + onDisplayCapabilityListener = new OnSystemCapabilityListener() { @Override public void onCapabilityRetrieved(Object capability) { - List<SoftButtonCapabilities> softButtonCapabilitiesList = (List<SoftButtonCapabilities>) capability; - if (softButtonCapabilitiesList != null && !softButtonCapabilitiesList.isEmpty()) { - softButtonCapabilities = softButtonCapabilitiesList.get(0); - } else { - softButtonCapabilities = null; + // instead of using the parameter it's more safe to use the convenience method + List<DisplayCapability> capabilities = SystemCapabilityManager.convertToList(capability, DisplayCapability.class); + if (capabilities == null || capabilities.size() == 0) { + DebugTool.logError("SoftButton Manager - Capabilities sent here are null or empty"); + }else { + DisplayCapability display = capabilities.get(0); + for (WindowCapability windowCapability : display.getWindowCapabilities()) { + int currentWindowID = windowCapability.getWindowID() != null ? windowCapability.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + if (currentWindowID == PredefinedWindows.DEFAULT_WINDOW.getValue()) { + defaultMainWindowCapability = windowCapability; + } + } } } @Override public void onError(String info) { - Log.w(TAG, "SoftButton Capability cannot be retrieved:"); - softButtonCapabilities = null; + DebugTool.logError("Display Capability cannot be retrieved"); + defaultMainWindowCapability = null; } }; - this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.SOFTBUTTON, onSoftButtonCapabilitiesListener); - - - // Add OnDisplayCapabilitiesListener to keep displayCapabilities updated - onDisplayCapabilitiesListener = new OnSystemCapabilityListener() { - @Override - public void onCapabilityRetrieved(Object capability) { - displayCapabilities = (DisplayCapabilities) capability; - } - - @Override - public void onError(String info) { - Log.w(TAG, "Display Capability cannot be retrieved:"); - displayCapabilities = null; - } - }; - this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAY, onDisplayCapabilitiesListener); - + this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplayCapabilityListener); // Add OnHMIStatusListener to keep currentHMILevel updated this.onHMIStatusListener = new OnRPCNotificationListener() { @@ -528,8 +518,10 @@ abstract class BaseSoftButtonManager extends BaseSubManager { internalInterface.sendRPC(inProgressShowRPC); } - private boolean softButtonImagesSupported(){ - return (displayCapabilities == null || displayCapabilities.getGraphicSupported()) && (softButtonCapabilities == null || softButtonCapabilities.getImageSupported()); + private boolean softButtonImagesSupported() { + return defaultMainWindowCapability == null + || defaultMainWindowCapability.getSoftButtonCapabilities() == null + || (!defaultMainWindowCapability.getSoftButtonCapabilities().isEmpty() && defaultMainWindowCapability.getSoftButtonCapabilities().get(0).getImageSupported()); } /** @@ -588,8 +580,7 @@ abstract class BaseSoftButtonManager extends BaseSubManager { internalInterface.removeOnRPCNotificationListener(FunctionID.ON_HMI_STATUS, onHMIStatusListener); internalInterface.removeOnRPCNotificationListener(FunctionID.ON_BUTTON_PRESS, onButtonPressListener); internalInterface.removeOnRPCNotificationListener(FunctionID.ON_BUTTON_EVENT, onButtonEventListener); - internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.SOFTBUTTON, onSoftButtonCapabilitiesListener); - internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAY, onDisplayCapabilitiesListener); + internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplayCapabilityListener); } /** diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/BaseTextAndGraphicManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/BaseTextAndGraphicManager.java index e6a936957..83190d078 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/BaseTextAndGraphicManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/BaseTextAndGraphicManager.java @@ -42,13 +42,15 @@ import com.smartdevicelink.managers.file.filetypes.SdlArtwork; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.RPCNotification; import com.smartdevicelink.proxy.RPCResponse; +import com.smartdevicelink.proxy.SystemCapabilityManager; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; +import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.MetadataTags; import com.smartdevicelink.proxy.rpc.OnHMIStatus; import com.smartdevicelink.proxy.rpc.Show; import com.smartdevicelink.proxy.rpc.TextField; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.MetadataType; import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows; @@ -82,14 +84,14 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { volatile Show inProgressUpdate; Show currentScreenData, queuedImageUpdate; HMILevel currentHMILevel; - protected DisplayCapabilities displayCapabilities; + WindowCapability defaultMainWindowCapability; private boolean pendingHMIFull, batchingUpdates; private final WeakReference<FileManager> fileManager; private final WeakReference<SoftButtonManager> softButtonManager; private CompletionListener queuedUpdateListener, inProgressListener, pendingHMIListener; SdlArtwork blankArtwork; private OnRPCNotificationListener hmiListener; - private OnSystemCapabilityListener onDisplayCapabilitiesListener; + private OnSystemCapabilityListener onDisplaysCapabilityListener; private SdlArtwork primaryGraphic, secondaryGraphic; private TextAlignment textAlignment; private String textField1, textField2, textField3, textField4, mediaTrackTextField, title; @@ -135,7 +137,7 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { primaryGraphic = null; secondaryGraphic = null; blankArtwork = null; - displayCapabilities = null; + defaultMainWindowCapability = null; inProgressUpdate = null; queuedImageUpdate = null; currentScreenData = null; @@ -148,7 +150,7 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { // remove listeners internalInterface.removeOnRPCNotificationListener(FunctionID.ON_HMI_STATUS, hmiListener); - internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAY, onDisplayCapabilitiesListener); + internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplaysCapabilityListener); super.dispose(); } @@ -175,20 +177,32 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { }; internalInterface.addOnRPCNotificationListener(FunctionID.ON_HMI_STATUS, hmiListener); - // Add OnDisplayCapabilitiesListener to keep displayCapabilities updated - onDisplayCapabilitiesListener = new OnSystemCapabilityListener() { + + onDisplaysCapabilityListener = new OnSystemCapabilityListener() { @Override public void onCapabilityRetrieved(Object capability) { - displayCapabilities = (DisplayCapabilities)capability; + // instead of using the parameter it's more safe to use the convenience method + List<DisplayCapability> capabilities = SystemCapabilityManager.convertToList(capability, DisplayCapability.class); + if (capabilities == null || capabilities.size() == 0) { + DebugTool.logError("TextAndGraphic Manager - Capabilities sent here are null or empty"); + }else { + DisplayCapability display = capabilities.get(0); + for (WindowCapability windowCapability : display.getWindowCapabilities()) { + int currentWindowID = windowCapability.getWindowID() != null ? windowCapability.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + if (currentWindowID == PredefinedWindows.DEFAULT_WINDOW.getValue()) { + defaultMainWindowCapability = windowCapability; + } + } + } } @Override public void onError(String info) { - Log.e(TAG, "DISPLAY Capability cannot be retrieved:"); - displayCapabilities = null; + DebugTool.logError("Display Capability cannot be retrieved"); + defaultMainWindowCapability = null; } }; - this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAY, onDisplayCapabilitiesListener); + this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplaysCapabilityListener); } // Upload / Send @@ -323,7 +337,7 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { if (this.softButtonManager.get() != null) { this.softButtonManager.get().setCurrentMainField1(inProgressUpdate.getMainField1()); } - internalInterface.sendRPCRequest(inProgressUpdate); + internalInterface.sendRPC(inProgressUpdate); } // Images @@ -719,6 +733,7 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { abstract SdlArtwork getBlankArtwork(); + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean sdlArtworkNeedsUpload(SdlArtwork artwork){ if (fileManager.get() != null) { return artwork != null && !fileManager.get().hasUploadedFile(artwork) && !artwork.isStaticIcon(); @@ -727,7 +742,7 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { } private boolean shouldUpdatePrimaryImage() { - if (displayCapabilities == null || displayCapabilities.getGraphicSupported()) { + if (defaultMainWindowCapability == null || defaultMainWindowCapability.getImageTypeSupported() == null || defaultMainWindowCapability.getImageTypeSupported().size() > 0) { if (currentScreenData.getGraphic() == null && primaryGraphic != null) { return true; } else if (currentScreenData.getGraphic() == null && primaryGraphic == null) { @@ -741,7 +756,7 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { private boolean shouldUpdateSecondaryImage() { // Cannot detect if there is a secondary image, so we'll just try to detect if there's a primary image and allow it if there is. - if (displayCapabilities == null || displayCapabilities.getGraphicSupported()) { + if (defaultMainWindowCapability == null || defaultMainWindowCapability.getImageTypeSupported() == null || defaultMainWindowCapability.getImageTypeSupported().size() > 0) { if (currentScreenData.getGraphic() == null && secondaryGraphic != null) { return true; } else if (currentScreenData.getGraphic() == null && secondaryGraphic == null) { @@ -755,13 +770,13 @@ abstract class BaseTextAndGraphicManager extends BaseSubManager { int getNumberOfLines() { - if (displayCapabilities == null){ + if (defaultMainWindowCapability == null){ return 4; } int linesFound = 0; - List<TextField> textFields = displayCapabilities.getTextFields(); + List<TextField> textFields = defaultMainWindowCapability.getTextFields(); TextFieldName name; for (TextField field : textFields) { if (field.getName() != null) { diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/SoftButtonState.java b/base/src/main/java/com/smartdevicelink/managers/screen/SoftButtonState.java index 9e48b2f7d..97842a8eb 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/SoftButtonState.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/SoftButtonState.java @@ -39,8 +39,6 @@ import com.smartdevicelink.proxy.rpc.SoftButton; import com.smartdevicelink.proxy.rpc.enums.SoftButtonType; import com.smartdevicelink.proxy.rpc.enums.SystemAction; -import java.util.List; - /** * <strong>SoftButtonState</strong> <br> * Defines an individual state for SoftButtonObject.<br> diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java index e343cd131..591f50a84 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/BaseChoiceSetManager.java @@ -42,11 +42,13 @@ import com.smartdevicelink.managers.CompletionListener; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.RPCNotification; +import com.smartdevicelink.proxy.SystemCapabilityManager; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; +import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.KeyboardProperties; import com.smartdevicelink.proxy.rpc.OnHMIStatus; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.InteractionMode; import com.smartdevicelink.proxy.rpc.enums.KeyboardLayout; @@ -60,7 +62,6 @@ import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; import com.smartdevicelink.util.DebugTool; import java.lang.ref.WeakReference; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.concurrent.Future; @@ -80,9 +81,9 @@ abstract class BaseChoiceSetManager extends BaseSubManager { final WeakReference<FileManager> fileManager; OnRPCNotificationListener hmiListener; - OnSystemCapabilityListener displayListener; + OnSystemCapabilityListener onDisplayCapabilityListener; HMILevel currentHMILevel; - DisplayCapabilities displayCapabilities; + WindowCapability defaultMainWindowCapability; SystemContext currentSystemContext; HashSet<ChoiceCell> preloadedChoices, pendingPreloadChoices; ChoiceSet pendingPresentationSet; @@ -139,7 +140,7 @@ abstract class BaseChoiceSetManager extends BaseSubManager { currentHMILevel = null; currentSystemContext = null; - displayCapabilities = null; + defaultMainWindowCapability = null; pendingPresentationSet = null; pendingPresentOperation = null; @@ -149,7 +150,7 @@ abstract class BaseChoiceSetManager extends BaseSubManager { // remove listeners internalInterface.removeOnRPCNotificationListener(FunctionID.ON_HMI_STATUS, hmiListener); - internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAY, displayListener); + internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplayCapabilityListener); super.dispose(); } @@ -207,7 +208,7 @@ abstract class BaseChoiceSetManager extends BaseSubManager { pendingPreloadChoices.addAll(choicesToUpload); if (fileManager.get() != null) { - PreloadChoicesOperation preloadChoicesOperation = new PreloadChoicesOperation(internalInterface, fileManager.get(), displayCapabilities, isVROptional, choicesToUpload, new CompletionListener() { + PreloadChoicesOperation preloadChoicesOperation = new PreloadChoicesOperation(internalInterface, fileManager.get(), defaultMainWindowCapability, isVROptional, choicesToUpload, new CompletionListener() { @Override public void onComplete(boolean success) { if (success){ @@ -509,19 +510,32 @@ abstract class BaseChoiceSetManager extends BaseSubManager { // LISTENERS private void addListeners(){ - // DISPLAY CAPABILITIES - via SCM - displayListener = new OnSystemCapabilityListener() { + // DISPLAY/WINDOW CAPABILITIES - via SCM + onDisplayCapabilityListener = new OnSystemCapabilityListener() { @Override public void onCapabilityRetrieved(Object capability) { - displayCapabilities = (DisplayCapabilities) capability; + // instead of using the parameter it's more safe to use the convenience method + List<DisplayCapability> capabilities = SystemCapabilityManager.convertToList(capability, DisplayCapability.class); + if (capabilities == null || capabilities.size() == 0) { + DebugTool.logError("SoftButton Manager - Capabilities sent here are null or empty"); + }else { + DisplayCapability display = capabilities.get(0); + for (WindowCapability windowCapability : display.getWindowCapabilities()) { + int currentWindowID = windowCapability.getWindowID() != null ? windowCapability.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + if (currentWindowID == PredefinedWindows.DEFAULT_WINDOW.getValue()) { + defaultMainWindowCapability = windowCapability; + } + } + } } @Override public void onError(String info) { DebugTool.logError("Unable to retrieve display capabilities. Many things will probably break. Info: "+ info); + defaultMainWindowCapability = null; } }; - internalInterface.getCapability(SystemCapabilityType.DISPLAY, displayListener); + this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplayCapabilityListener); // HMI UPDATES hmiListener = new OnRPCNotificationListener() { diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSet.java b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSet.java index b846760c7..34bdbd6a4 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSet.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSet.java @@ -34,6 +34,7 @@ package com.smartdevicelink.managers.screen.choiceset; import android.support.annotation.NonNull; import android.support.annotation.Nullable; + import com.smartdevicelink.proxy.TTSChunkFactory; import com.smartdevicelink.proxy.rpc.KeyboardProperties; import com.smartdevicelink.proxy.rpc.TTSChunk; diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/KeyboardAutocompleteCompletionListener.java b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/KeyboardAutocompleteCompletionListener.java index 992509019..13b19238d 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/KeyboardAutocompleteCompletionListener.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/KeyboardAutocompleteCompletionListener.java @@ -32,9 +32,6 @@ package com.smartdevicelink.managers.screen.choiceset; -import com.smartdevicelink.proxy.SystemCapabilityManager; -import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; - import java.util.List; public interface KeyboardAutocompleteCompletionListener { diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperation.java b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperation.java index 99cd91a96..6492d2c09 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperation.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/choiceset/PreloadChoicesOperation.java @@ -49,6 +49,7 @@ import com.smartdevicelink.proxy.rpc.DisplayCapabilities; import com.smartdevicelink.proxy.rpc.Image; import com.smartdevicelink.proxy.rpc.ImageField; import com.smartdevicelink.proxy.rpc.TextField; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.ImageFieldName; import com.smartdevicelink.proxy.rpc.enums.Result; import com.smartdevicelink.proxy.rpc.enums.TextFieldName; @@ -66,18 +67,18 @@ class PreloadChoicesOperation extends AsynchronousOperation { private WeakReference<ISdl> internalInterface; private WeakReference<FileManager> fileManager; - private DisplayCapabilities displayCapabilities; + private WindowCapability defaultMainWindowCapability; private HashSet<ChoiceCell> cellsToUpload; private CompletionListener completionListener; private boolean isRunning; private boolean isVROptional; - PreloadChoicesOperation(ISdl internalInterface, FileManager fileManager, DisplayCapabilities displayCapabilities, + PreloadChoicesOperation(ISdl internalInterface, FileManager fileManager, WindowCapability defaultMainWindowCapability, Boolean isVROptional, HashSet<ChoiceCell> cellsToPreload, CompletionListener listener){ super(); this.internalInterface = new WeakReference<>(internalInterface); this.fileManager = new WeakReference<>(fileManager); - this.displayCapabilities = displayCapabilities; + this.defaultMainWindowCapability = defaultMainWindowCapability; this.isVROptional = isVROptional; this.cellsToUpload = cellsToPreload; this.completionListener = listener; @@ -249,10 +250,10 @@ class PreloadChoicesOperation extends AsynchronousOperation { } boolean hasImageFieldOfName(ImageFieldName name){ - if (displayCapabilities == null ){ return false; } - if (displayCapabilities.getGraphicSupported() == null || !displayCapabilities.getGraphicSupported()) { return false; } - if (displayCapabilities.getImageFields() != null){ - for (ImageField field : displayCapabilities.getImageFields()){ + if (defaultMainWindowCapability == null ){ return false; } + if (defaultMainWindowCapability.getImageTypeSupported() == null || defaultMainWindowCapability.getImageTypeSupported().isEmpty()) { return false; } + if (defaultMainWindowCapability.getImageFields() != null){ + for (ImageField field : defaultMainWindowCapability.getImageFields()){ if (field.getName().equals(name)){ return true; } @@ -262,9 +263,9 @@ class PreloadChoicesOperation extends AsynchronousOperation { } boolean hasTextFieldOfName(TextFieldName name){ - if (displayCapabilities == null ){ return false; } - if (displayCapabilities.getTextFields() != null){ - for (TextField field : displayCapabilities.getTextFields()){ + if (defaultMainWindowCapability == null ){ return false; } + if (defaultMainWindowCapability.getTextFields() != null){ + for (TextField field : defaultMainWindowCapability.getTextFields()){ if (field.getName().equals(name)){ return true; } @@ -272,5 +273,4 @@ class PreloadChoicesOperation extends AsynchronousOperation { } return false; } - }
\ No newline at end of file diff --git a/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseMenuManager.java b/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseMenuManager.java index f53331157..21a4eec06 100644 --- a/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseMenuManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/screen/menu/BaseMenuManager.java @@ -43,13 +43,14 @@ import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.RPCNotification; import com.smartdevicelink.proxy.RPCRequest; import com.smartdevicelink.proxy.RPCResponse; +import com.smartdevicelink.proxy.SystemCapabilityManager; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener; import com.smartdevicelink.proxy.rpc.AddCommand; import com.smartdevicelink.proxy.rpc.AddSubMenu; import com.smartdevicelink.proxy.rpc.DeleteCommand; import com.smartdevicelink.proxy.rpc.DeleteSubMenu; -import com.smartdevicelink.proxy.rpc.DisplayCapabilities; +import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.ImageField; import com.smartdevicelink.proxy.rpc.MenuParams; import com.smartdevicelink.proxy.rpc.OnCommand; @@ -57,10 +58,10 @@ import com.smartdevicelink.proxy.rpc.OnHMIStatus; import com.smartdevicelink.proxy.rpc.SdlMsgVersion; import com.smartdevicelink.proxy.rpc.ShowAppMenu; import com.smartdevicelink.proxy.rpc.SetGlobalProperties; +import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.enums.DisplayType; import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.ImageFieldName; -import com.smartdevicelink.proxy.rpc.enums.MenuLayout; import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows; import com.smartdevicelink.proxy.rpc.enums.Result; import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; @@ -91,15 +92,15 @@ abstract class BaseMenuManager extends BaseSubManager { DynamicMenuUpdatesMode dynamicMenuUpdatesMode; MenuConfiguration menuConfiguration; SdlMsgVersion sdlMsgVersion; - private DisplayType displayType; + private String displayType; boolean waitingOnHMIUpdate; private boolean hasQueuedUpdate; HMILevel currentHMILevel; OnRPCNotificationListener hmiListener, commandListener; - OnSystemCapabilityListener displayListener; - DisplayCapabilities displayCapabilities; + OnSystemCapabilityListener onDisplaysCapabilityListener; + WindowCapability defaultMainWindowCapability; private static final int MAX_ID = 2000000000; private static final int parentIdNotFound = MAX_ID; @@ -138,7 +139,7 @@ abstract class BaseMenuManager extends BaseSubManager { currentHMILevel = null; currentSystemContext = SystemContext.SYSCTXT_MAIN; dynamicMenuUpdatesMode = DynamicMenuUpdatesMode.ON_WITH_COMPAT_MODE; - displayCapabilities = null; + defaultMainWindowCapability = null; inProgressUpdate = null; hasQueuedUpdate = false; waitingOnHMIUpdate = false; @@ -151,7 +152,7 @@ abstract class BaseMenuManager extends BaseSubManager { // remove listeners internalInterface.removeOnRPCNotificationListener(FunctionID.ON_HMI_STATUS, hmiListener); internalInterface.removeOnRPCNotificationListener(FunctionID.ON_COMMAND, commandListener); - internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAY, displayListener); + internalInterface.removeOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplaysCapabilityListener); super.dispose(); } @@ -450,13 +451,13 @@ abstract class BaseMenuManager extends BaseSubManager { } } - private boolean checkUpdateMode(DynamicMenuUpdatesMode updateMode, DisplayType displayType){ + private boolean checkUpdateMode(DynamicMenuUpdatesMode updateMode, String displayType){ if (updateMode.equals(DynamicMenuUpdatesMode.ON_WITH_COMPAT_MODE)){ if (displayType == null){ return true; } - return (!displayType.equals(DisplayType.GEN3_8_INCH)); + return (!displayType.equals(DisplayType.GEN3_8_INCH.toString())); } else if (updateMode.equals(DynamicMenuUpdatesMode.FORCE_OFF)){ return false; @@ -773,8 +774,8 @@ abstract class BaseMenuManager extends BaseSubManager { @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean supportsImages(){ - if (displayCapabilities != null && displayCapabilities.getImageFields() != null) { - List<ImageField> imageFields = displayCapabilities.getImageFields(); + if (defaultMainWindowCapability != null && defaultMainWindowCapability.getImageFields() != null) { + List<ImageField> imageFields = defaultMainWindowCapability.getImageFields(); for (ImageField field : imageFields) { if (field.getName().equals(ImageFieldName.cmdIcon)) { return true; @@ -1004,25 +1005,34 @@ abstract class BaseMenuManager extends BaseSubManager { // LISTENERS - @SuppressWarnings("deprecation") private void addListeners(){ - // DISPLAY CAPABILITIES - via SCM - displayListener = new OnSystemCapabilityListener() { + onDisplaysCapabilityListener = new OnSystemCapabilityListener() { @Override public void onCapabilityRetrieved(Object capability) { - displayCapabilities = (DisplayCapabilities) capability; - if (displayCapabilities != null) { - displayType = displayCapabilities.getDisplayType(); + // instead of using the parameter it's more safe to use the convenience method + List<DisplayCapability> capabilities = SystemCapabilityManager.convertToList(capability, DisplayCapability.class); + if (capabilities == null || capabilities.size() == 0) { + DebugTool.logError("SoftButton Manager - Capabilities sent here are null or empty"); + }else { + DisplayCapability display = capabilities.get(0); + displayType = display.getDisplayName(); + for (WindowCapability windowCapability : display.getWindowCapabilities()) { + int currentWindowID = windowCapability.getWindowID() != null ? windowCapability.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + if (currentWindowID == PredefinedWindows.DEFAULT_WINDOW.getValue()) { + defaultMainWindowCapability = windowCapability; + } + } } } @Override public void onError(String info) { - DebugTool.logError("Unable to retrieve display capabilities: "+ info); + DebugTool.logError("Display Capability cannot be retrieved"); + defaultMainWindowCapability = null; } }; - internalInterface.getCapability(SystemCapabilityType.DISPLAY, displayListener); + this.internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onDisplaysCapabilityListener); // HMI UPDATES hmiListener = new OnRPCNotificationListener() { diff --git a/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java b/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java index 2e01ce026..febeb24ca 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java +++ b/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java @@ -36,7 +36,9 @@ import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener; import com.smartdevicelink.proxy.rpc.AppServiceCapability; import com.smartdevicelink.proxy.rpc.AppServicesCapabilities; +import com.smartdevicelink.proxy.rpc.ButtonCapabilities; import com.smartdevicelink.proxy.rpc.DisplayCapabilities; +import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.GetSystemCapability; import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse; import com.smartdevicelink.proxy.rpc.HMICapabilities; @@ -44,9 +46,17 @@ import com.smartdevicelink.proxy.rpc.OnSystemCapabilityUpdated; import com.smartdevicelink.proxy.rpc.RegisterAppInterfaceResponse; import com.smartdevicelink.proxy.rpc.SdlMsgVersion; import com.smartdevicelink.proxy.rpc.SetDisplayLayoutResponse; +import com.smartdevicelink.proxy.rpc.SoftButtonCapabilities; import com.smartdevicelink.proxy.rpc.SystemCapability; +import com.smartdevicelink.proxy.rpc.WindowCapability; +import com.smartdevicelink.proxy.rpc.WindowTypeCapabilities; +import com.smartdevicelink.proxy.rpc.enums.DisplayType; +import com.smartdevicelink.proxy.rpc.enums.ImageType; +import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat; +import com.smartdevicelink.proxy.rpc.enums.PredefinedWindows; import com.smartdevicelink.proxy.rpc.enums.Result; import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; +import com.smartdevicelink.proxy.rpc.enums.WindowType; import com.smartdevicelink.proxy.rpc.listeners.OnRPCListener; import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener; import com.smartdevicelink.util.CorrelationIdGenerator; @@ -54,8 +64,10 @@ import com.smartdevicelink.util.DebugTool; import com.smartdevicelink.util.Version; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.ListIterator; import java.util.concurrent.CopyOnWriteArrayList; public class SystemCapabilityManager { @@ -64,18 +76,161 @@ public class SystemCapabilityManager { private final Object LISTENER_LOCK; private final ISdl callback; private OnRPCListener rpcListener; + private boolean shouldConvertDeprecatedDisplayCapabilities; public SystemCapabilityManager(ISdl callback){ this.callback = callback; this.LISTENER_LOCK = new Object(); this.onSystemCapabilityListeners = new HashMap<>(); this.cachedSystemCapabilities = new HashMap<>(); + this.shouldConvertDeprecatedDisplayCapabilities = true; setupRpcListeners(); } + private List<DisplayCapability> createDisplayCapabilityList(RegisterAppInterfaceResponse rpc) { + return createDisplayCapabilityList(rpc.getDisplayCapabilities(), rpc.getButtonCapabilities(), rpc.getSoftButtonCapabilities()); + } + + private List<DisplayCapability> createDisplayCapabilityList(SetDisplayLayoutResponse rpc) { + return createDisplayCapabilityList(rpc.getDisplayCapabilities(), rpc.getButtonCapabilities(), rpc.getSoftButtonCapabilities()); + } + + private List<DisplayCapability> createDisplayCapabilityList(DisplayCapabilities display, List<ButtonCapabilities> button, List<SoftButtonCapabilities> softButton) { + // Based on deprecated Display capabilities we don't know if widgets are supported, + // The Default MAIN window is the only window we know is supported + WindowTypeCapabilities windowTypeCapabilities = new WindowTypeCapabilities(WindowType.MAIN, 1); + + DisplayCapability displayCapability = new DisplayCapability(); + displayCapability.setDisplayName(display != null ? display.getDisplayName() : display.getDisplayType().toString()); + displayCapability.setWindowTypeSupported(Collections.singletonList(windowTypeCapabilities)); + + // Create a window capability object for the default MAIN window + WindowCapability defaultWindowCapability = new WindowCapability(); + defaultWindowCapability.setWindowID(PredefinedWindows.DEFAULT_WINDOW.getValue()); + defaultWindowCapability.setButtonCapabilities(button); + defaultWindowCapability.setSoftButtonCapabilities(softButton); + + // return if display capabilities don't exist. + if (display == null) { + displayCapability.setWindowCapabilities(Collections.singletonList(defaultWindowCapability)); + return Collections.singletonList(displayCapability); + } + + // copy all available display capabilities + defaultWindowCapability.setTemplatesAvailable(display.getTemplatesAvailable()); + defaultWindowCapability.setNumCustomPresetsAvailable(display.getNumCustomPresetsAvailable()); + defaultWindowCapability.setTextFields(display.getTextFields()); + defaultWindowCapability.setImageFields(display.getImageFields()); + ArrayList<ImageType> imageTypeSupported = new ArrayList<>(); + imageTypeSupported.add(ImageType.STATIC); // static images expected to always work on any head unit + if (display.getGraphicSupported()) { + imageTypeSupported.add(ImageType.DYNAMIC); + } + defaultWindowCapability.setImageTypeSupported(imageTypeSupported); + + displayCapability.setWindowCapabilities(Collections.singletonList(defaultWindowCapability)); + return Collections.singletonList(displayCapability); + } + + private DisplayCapabilities createDeprecatedDisplayCapabilities(String displayName, WindowCapability defaultMainWindow) { + DisplayCapabilities convertedCapabilities = new DisplayCapabilities(); + convertedCapabilities.setDisplayType(DisplayType.SDL_GENERIC); //deprecated but it is mandatory... + convertedCapabilities.setDisplayName(displayName); + convertedCapabilities.setTextFields(defaultMainWindow.getTextFields()); + convertedCapabilities.setImageFields(defaultMainWindow.getImageFields()); + convertedCapabilities.setTemplatesAvailable(defaultMainWindow.getTemplatesAvailable()); + convertedCapabilities.setNumCustomPresetsAvailable(defaultMainWindow.getNumCustomPresetsAvailable()); + convertedCapabilities.setMediaClockFormats(new ArrayList<MediaClockFormat>()); // mandatory field but allows empty array + // if there are imageTypes in the response, we must assume graphics are supported + convertedCapabilities.setGraphicSupported(defaultMainWindow.getImageTypeSupported() != null && defaultMainWindow.getImageTypeSupported().size() > 0); + + return convertedCapabilities; + } + + private void updateDeprecatedDisplayCapabilities() { + WindowCapability defaultMainWindowCapabilities = getDefaultMainWindowCapability(); + List<DisplayCapability> displayCapabilityList = convertToList(getCapability(SystemCapabilityType.DISPLAYS), DisplayCapability.class); + + if (defaultMainWindowCapabilities == null || displayCapabilityList == null || displayCapabilityList.size() == 0) { + return; + } + + // cover the deprecated capabilities for backward compatibility + setCapability(SystemCapabilityType.DISPLAY, createDeprecatedDisplayCapabilities(displayCapabilityList.get(0).getDisplayName(), defaultMainWindowCapabilities)); + setCapability(SystemCapabilityType.BUTTON, defaultMainWindowCapabilities.getButtonCapabilities()); + setCapability(SystemCapabilityType.SOFTBUTTON, defaultMainWindowCapabilities.getSoftButtonCapabilities()); + } + + private void updateCachedDisplayCapabilityList(List<DisplayCapability> newCapabilities) { + if (newCapabilities == null || newCapabilities.size() == 0) { + DebugTool.logWarning("Received invalid display capability list"); + return; + } + + List<DisplayCapability> oldCapabilities = convertToList(getCapability(SystemCapabilityType.DISPLAYS), DisplayCapability.class); + + if (oldCapabilities == null || oldCapabilities.size() == 0) { + setCapability(SystemCapabilityType.DISPLAYS, newCapabilities); + updateDeprecatedDisplayCapabilities(); + return; + } + + DisplayCapability oldDefaultDisplayCapabilities = oldCapabilities.get(0); + ArrayList<WindowCapability> copyWindowCapabilities = new ArrayList<>(oldDefaultDisplayCapabilities.getWindowCapabilities()); + + DisplayCapability newDefaultDisplayCapabilities = newCapabilities.get(0); + List<WindowCapability> newWindowCapabilities = newDefaultDisplayCapabilities.getWindowCapabilities(); + + for (WindowCapability newWindow : newWindowCapabilities) { + ListIterator<WindowCapability> iterator = copyWindowCapabilities.listIterator(); + boolean oldFound = false; + while (iterator.hasNext()) { + WindowCapability oldWindow = iterator.next(); + int newWindowID = newWindow.getWindowID() != null ? newWindow.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + int oldWindowID = oldWindow.getWindowID() != null ? oldWindow.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + if (newWindowID == oldWindowID) { + iterator.set(newWindow); // replace the old window caps with new ones + oldFound = true; + break; + } + } + + if (!oldFound) { + copyWindowCapabilities.add(newWindow); // this is a new unknown window + } + } + + // replace the window capabilities array with the merged one. + newDefaultDisplayCapabilities.setWindowCapabilities(copyWindowCapabilities); + setCapability(SystemCapabilityType.DISPLAYS, Collections.singletonList(newDefaultDisplayCapabilities)); + updateDeprecatedDisplayCapabilities(); + } + + + public WindowCapability getWindowCapability(int windowID) { + List<DisplayCapability> capabilities = convertToList(getCapability(SystemCapabilityType.DISPLAYS), DisplayCapability.class); + if (capabilities == null || capabilities.size() == 0) { + return null; + } + DisplayCapability display = capabilities.get(0); + for (WindowCapability windowCapability : display.getWindowCapabilities()) { + int currentWindowID = windowCapability.getWindowID() != null ? windowCapability.getWindowID() : PredefinedWindows.DEFAULT_WINDOW.getValue(); + if (currentWindowID == windowID) { + return windowCapability; + } + } + return null; + } + + public WindowCapability getDefaultMainWindowCapability() { + return getWindowCapability(PredefinedWindows.DEFAULT_WINDOW.getValue()); + } + public void parseRAIResponse(RegisterAppInterfaceResponse response){ if(response!=null && response.getSuccess()) { + this.shouldConvertDeprecatedDisplayCapabilities = true; // reset the flag + setCapability(SystemCapabilityType.DISPLAYS, createDisplayCapabilityList(response)); setCapability(SystemCapabilityType.HMI, response.getHmiCapabilities()); setCapability(SystemCapabilityType.DISPLAY, response.getDisplayCapabilities()); setCapability(SystemCapabilityType.AUDIO_PASSTHROUGH, response.getAudioPassThruCapabilities()); @@ -90,7 +245,7 @@ public class SystemCapabilityManager { } } - private void setupRpcListeners(){ + private void setupRpcListeners() { rpcListener = new OnRPCListener() { @Override public void onReceived(RPCMessage message) { @@ -103,36 +258,53 @@ public class SystemCapabilityManager { setCapability(SystemCapabilityType.BUTTON, response.getButtonCapabilities()); setCapability(SystemCapabilityType.PRESET_BANK, response.getPresetBankCapabilities()); setCapability(SystemCapabilityType.SOFTBUTTON, response.getSoftButtonCapabilities()); + if (shouldConvertDeprecatedDisplayCapabilities) { + setCapability(SystemCapabilityType.DISPLAYS, createDisplayCapabilityList(response)); + } + break; + case GET_SYSTEM_CAPABILITY: + GetSystemCapabilityResponse systemCapabilityResponse = (GetSystemCapabilityResponse) message; + SystemCapability systemCapability = systemCapabilityResponse.getSystemCapability(); + if (systemCapabilityResponse.getSuccess() && SystemCapabilityType.DISPLAYS.equals(systemCapability.getSystemCapabilityType())) { + shouldConvertDeprecatedDisplayCapabilities = false; // Successfully got DISPLAYS data. No conversion needed anymore + List<DisplayCapability> newCapabilities = (List<DisplayCapability>) systemCapability.getCapabilityForType(SystemCapabilityType.DISPLAYS); + updateCachedDisplayCapabilityList(newCapabilities); + } break; } - } else if (RPCMessage.KEY_NOTIFICATION.equals(message.getMessageType())){ + } else if (RPCMessage.KEY_NOTIFICATION.equals(message.getMessageType())) { switch (message.getFunctionID()) { case ON_SYSTEM_CAPABILITY_UPDATED: - OnSystemCapabilityUpdated onSystemCapabilityUpdated =(OnSystemCapabilityUpdated)message; - if(onSystemCapabilityUpdated.getSystemCapability() != null){ + OnSystemCapabilityUpdated onSystemCapabilityUpdated = (OnSystemCapabilityUpdated) message; + if (onSystemCapabilityUpdated.getSystemCapability() != null) { SystemCapability systemCapability = onSystemCapabilityUpdated.getSystemCapability(); SystemCapabilityType systemCapabilityType = systemCapability.getSystemCapabilityType(); Object capability = systemCapability.getCapabilityForType(systemCapabilityType); - if(cachedSystemCapabilities.containsKey(systemCapabilityType)) { //The capability already exists + if (cachedSystemCapabilities.containsKey(systemCapabilityType)) { //The capability already exists switch (systemCapabilityType) { case APP_SERVICES: // App services only updates what was changed so we need // to update the capability rather than override it AppServicesCapabilities appServicesCapabilities = (AppServicesCapabilities) capability; - if(capability != null) { - List<AppServiceCapability> appServicesCapabilitiesList = appServicesCapabilities.getAppServices(); - AppServicesCapabilities cachedAppServicesCapabilities = (AppServicesCapabilities) cachedSystemCapabilities.get(systemCapabilityType); - //Update the cached app services - cachedAppServicesCapabilities.updateAppServices(appServicesCapabilitiesList); - //Set the new capability object to the updated cached capabilities - capability = cachedAppServicesCapabilities; + if (capability != null) { + List<AppServiceCapability> appServicesCapabilitiesList = appServicesCapabilities.getAppServices(); + AppServicesCapabilities cachedAppServicesCapabilities = (AppServicesCapabilities) cachedSystemCapabilities.get(systemCapabilityType); + //Update the cached app services + cachedAppServicesCapabilities.updateAppServices(appServicesCapabilitiesList); + //Set the new capability object to the updated cached capabilities + capability = cachedAppServicesCapabilities; } break; + case DISPLAYS: + shouldConvertDeprecatedDisplayCapabilities = false; // Successfully got DISPLAYS data. No conversion needed anymore + // this notification can return only affected windows (hence not all windows) + List<DisplayCapability> newCapabilities = (List<DisplayCapability>) capability; + updateCachedDisplayCapabilityList(newCapabilities); } } - if(capability != null){ - setCapability(systemCapabilityType, capability); - } + if (capability != null) { + setCapability(systemCapabilityType, capability); + } } } } @@ -140,7 +312,8 @@ public class SystemCapabilityManager { } }; - if(callback != null){ + if (callback != null) { + callback.addOnRPCListener(FunctionID.GET_SYSTEM_CAPABILITY, rpcListener); callback.addOnRPCListener(FunctionID.SET_DISPLAY_LAYOUT, rpcListener); callback.addOnRPCListener(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED, rpcListener); } diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindow.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindow.java index c2066f1c4..d0ac5807c 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindow.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindow.java @@ -1,9 +1,11 @@ package com.smartdevicelink.proxy.rpc;
import android.support.annotation.NonNull;
+
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.proxy.RPCRequest;
import com.smartdevicelink.proxy.rpc.enums.WindowType;
+
import java.util.Hashtable;
/**
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindowResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindowResponse.java index 86dac3602..733283462 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindowResponse.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/CreateWindowResponse.java @@ -1,9 +1,11 @@ package com.smartdevicelink.proxy.rpc;
import android.support.annotation.NonNull;
+
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.proxy.RPCResponse;
import com.smartdevicelink.proxy.rpc.enums.Result;
+
import java.util.Hashtable;
/**
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindow.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindow.java index 52cca2a04..3c766deeb 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindow.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindow.java @@ -1,8 +1,10 @@ package com.smartdevicelink.proxy.rpc;
import android.support.annotation.NonNull;
+
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.proxy.RPCRequest;
+
import java.util.Hashtable;
/**
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindowResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindowResponse.java index d519e11d9..d943e860b 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindowResponse.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DeleteWindowResponse.java @@ -1,9 +1,11 @@ package com.smartdevicelink.proxy.rpc;
import android.support.annotation.NonNull;
+
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.proxy.RPCResponse;
import com.smartdevicelink.proxy.rpc.enums.Result;
+
import java.util.Hashtable;
/**
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapability.java index 3d8862d1b..992083689 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapability.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/DisplayCapability.java @@ -1,6 +1,7 @@ package com.smartdevicelink.proxy.rpc; import com.smartdevicelink.proxy.RPCStruct; + import java.util.Hashtable; import java.util.List; diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java index 2ea186742..73634c17b 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SystemCapability.java @@ -37,7 +37,6 @@ import com.smartdevicelink.proxy.RPCStruct; import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; import java.util.Hashtable; -import java.util.List; /** * Struct that indicates the a SystemCapabilityType and houses different structs to describe particular capabilities @@ -83,46 +82,46 @@ public class SystemCapability extends RPCStruct { } public Object getCapabilityForType(SystemCapabilityType type) { - if(type == null) { + if (type == null) { return null; - }else if (type.equals(SystemCapabilityType.NAVIGATION)) { + } else if (type.equals(SystemCapabilityType.NAVIGATION)) { return getObject(NavigationCapability.class, KEY_NAVIGATION_CAPABILITY); } else if (type.equals(SystemCapabilityType.PHONE_CALL)) { return getObject(PhoneCapability.class, KEY_PHONE_CAPABILITY); - } else if (type.equals(SystemCapabilityType.VIDEO_STREAMING)){ + } else if (type.equals(SystemCapabilityType.VIDEO_STREAMING)) { return getObject(VideoStreamingCapability.class, KEY_VIDEO_STREAMING_CAPABILITY); - }else if(type.equals(SystemCapabilityType.REMOTE_CONTROL)){ + } else if (type.equals(SystemCapabilityType.REMOTE_CONTROL)) { return getObject(RemoteControlCapabilities.class, KEY_REMOTE_CONTROL_CAPABILITY); - }else if(type.equals(SystemCapabilityType.APP_SERVICES)){ - return (RPCStruct) getObject(AppServicesCapabilities.class, KEY_APP_SERVICES_CAPABILITIES); - }else if(type.equals(SystemCapabilityType.SEAT_LOCATION)){ - return (RPCStruct) getObject(SeatLocationCapability.class, KEY_SEAT_LOCATION_CAPABILITY); - }else if(type.equals(SystemCapabilityType.DISPLAYS)){ + } else if (type.equals(SystemCapabilityType.APP_SERVICES)) { + return getObject(AppServicesCapabilities.class, KEY_APP_SERVICES_CAPABILITIES); + } else if (type.equals(SystemCapabilityType.SEAT_LOCATION)) { + return getObject(SeatLocationCapability.class, KEY_SEAT_LOCATION_CAPABILITY); + } else if (type.equals(SystemCapabilityType.DISPLAYS)) { return getObject(DisplayCapability.class, KEY_DISPLAY_CAPABILITIES); - }else{ + } else { return null; } } - public void setCapabilityForType(SystemCapabilityType type, Object capability){ - if(type == null) { + public void setCapabilityForType(SystemCapabilityType type, Object capability) { + if (type == null) { return; - }else if(type.equals(SystemCapabilityType.NAVIGATION)){ + } else if (type.equals(SystemCapabilityType.NAVIGATION)) { setValue(KEY_NAVIGATION_CAPABILITY, capability); - }else if(type.equals(SystemCapabilityType.PHONE_CALL)){ + } else if (type.equals(SystemCapabilityType.PHONE_CALL)) { setValue(KEY_PHONE_CAPABILITY, capability); - }else if(type.equals(SystemCapabilityType.VIDEO_STREAMING)){ + } else if (type.equals(SystemCapabilityType.VIDEO_STREAMING)) { setValue(KEY_VIDEO_STREAMING_CAPABILITY, capability); - }else if(type.equals(SystemCapabilityType.REMOTE_CONTROL)){ + } else if (type.equals(SystemCapabilityType.REMOTE_CONTROL)) { setValue(KEY_REMOTE_CONTROL_CAPABILITY, capability); - }else if(type.equals(SystemCapabilityType.APP_SERVICES)){ - setValue(KEY_APP_SERVICES_CAPABILITIES, capability); - }else if(type.equals(SystemCapabilityType.SEAT_LOCATION)){ + } else if (type.equals(SystemCapabilityType.APP_SERVICES)) { + setValue(KEY_APP_SERVICES_CAPABILITIES, capability); + } else if (type.equals(SystemCapabilityType.SEAT_LOCATION)) { setValue(KEY_SEAT_LOCATION_CAPABILITY, capability); - }else if(type.equals(SystemCapabilityType.DISPLAYS)) { + } else if (type.equals(SystemCapabilityType.DISPLAYS)) { setValue(KEY_DISPLAY_CAPABILITIES, capability); - }else{ - return; + } else { + return; } } diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateConfiguration.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateConfiguration.java index ed9c4c3d3..a92e8e28a 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateConfiguration.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/TemplateConfiguration.java @@ -1,7 +1,9 @@ package com.smartdevicelink.proxy.rpc;
import android.support.annotation.NonNull;
+
import com.smartdevicelink.proxy.RPCStruct;
+
import java.util.Hashtable;
/**
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/WindowTypeCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/WindowTypeCapabilities.java index c4071e93c..f57d9a415 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/WindowTypeCapabilities.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/WindowTypeCapabilities.java @@ -1,8 +1,10 @@ package com.smartdevicelink.proxy.rpc;
import android.support.annotation.NonNull;
+
import com.smartdevicelink.proxy.RPCStruct;
import com.smartdevicelink.proxy.rpc.enums.WindowType;
+
import java.util.Hashtable;
/**
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java index cdd8b01a5..758a33905 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/SystemCapabilityType.java @@ -288,6 +288,7 @@ public enum SystemCapabilityType { * </tr> * </table> */ + @Deprecated DISPLAY (false), @@ -399,6 +400,7 @@ public enum SystemCapabilityType { * </tr> * </table> */ + @Deprecated BUTTON (false), /** @@ -441,6 +443,7 @@ public enum SystemCapabilityType { * </tr> * </table> */ + @Deprecated PRESET_BANK (false), /** @@ -464,6 +467,7 @@ public enum SystemCapabilityType { * </tr> * </table> */ + @Deprecated SOFTBUTTON (false), /** diff --git a/javaSE/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java b/javaSE/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java index f470b8a68..df14bfa6f 100644 --- a/javaSE/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java +++ b/javaSE/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java @@ -33,7 +33,6 @@ package com.smartdevicelink.managers.screen.choiceset; import android.support.annotation.NonNull; - import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.proxy.interfaces.ISdl; |