diff options
author | Bilal Alsharifi <599206+bilal-alsharifi@users.noreply.github.com> | 2019-04-08 12:17:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-08 12:17:33 -0400 |
commit | 1e07d7b3a435cda73de14702169001758ed9427d (patch) | |
tree | 10655f6acb9c9fb1f4285a69bdfc99bacb8d6b37 | |
parent | 38b9240ffc54d97485e7818536ec2f7db0ed9e3f (diff) | |
parent | ee234532244105d2973cfc82591d954f06f56472 (diff) | |
download | sdl_android-1e07d7b3a435cda73de14702169001758ed9427d.tar.gz |
Merge pull request #1034 from smartdevicelink/bugfix/scm_remove_app_service
Handle AppService Removed reason in SCM
4 files changed, 54 insertions, 20 deletions
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 80eed05e3..baa53272b 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 @@ -30,6 +30,7 @@ import com.smartdevicelink.proxy.rpc.SystemCapability; import com.smartdevicelink.proxy.rpc.VideoStreamingCapability; import com.smartdevicelink.proxy.rpc.enums.AppServiceType; import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities; +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.listeners.OnMultipleRequestListener; @@ -276,6 +277,25 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { assertNotNull(cachedCap); assertEquals(cachedCap.getAppServices().size(), 2); + /* PERFORM A NOTIFICATION SEND THROUGH THE SCM WITH A REMOVED SERVICE */ + AppServiceCapability removedService = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "NewNav", "eeeeeeeee", false, null); + removedService.setUpdateReason(ServiceUpdateReason.REMOVED); + AppServicesCapabilities removedServiceASC = new AppServicesCapabilities(); + removedServiceASC.setAppServices(Collections.singletonList(removedService)); + + systemCapability = new SystemCapability(); + systemCapability.setSystemCapabilityType(SystemCapabilityType.APP_SERVICES); + systemCapability.setCapabilityForType(SystemCapabilityType.APP_SERVICES, removedServiceASC); + + onSystemCapabilityUpdated = new OnSystemCapabilityUpdated(); + onSystemCapabilityUpdated.setSystemCapability(systemCapability); + + scmRpcListener.onReceived(onSystemCapabilityUpdated); + + cachedCap = (AppServicesCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES); + assertNotNull(cachedCap); + assertEquals(cachedCap.getAppServices().size(), 1); + } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java index 968124571..a069e2b69 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java @@ -3,6 +3,7 @@ package com.smartdevicelink.test.rpc.datatypes; import com.smartdevicelink.proxy.rpc.AppServiceCapability; import com.smartdevicelink.proxy.rpc.AppServicesCapabilities; import com.smartdevicelink.proxy.rpc.enums.AppServiceType; +import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason; import com.smartdevicelink.test.JsonUtils; import com.smartdevicelink.test.Test; import com.smartdevicelink.test.Validator; @@ -126,5 +127,17 @@ public class AppServicesCapabilitiesTests extends TestCase { assertEquals(capabilities1.getAppServices().size(), 3); + capability5.setUpdateReason(ServiceUpdateReason.REMOVED); + + /* TEST TO ENSURE A THE LIST BEING STORED WAS MODIFIED */ + assertTrue(capabilities1.updateAppServices(Collections.singletonList(capability5))); + + /* TEST TO ENSURE THE RECORD WAS REMOVED */ + assertEquals(capabilities1.getAppServices().size(), 2); + + /* TEST TO ENSURE THE RECORD REMOVED WAS THE CORRECT ONE */ + assertFalse(capabilities1.getAppServices().contains(capability5)); + + } }
\ No newline at end of file diff --git a/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java b/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java index 86b9dae93..24ba44331 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java +++ b/base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java @@ -115,13 +115,14 @@ public class SystemCapabilityManager { // App services only updates what was changed so we need // to update the capability rather than override it AppServicesCapabilities appServicesCapabilities = (AppServicesCapabilities) capability; - 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; } } diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java index 95fcb864c..36b14d8be 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java @@ -34,6 +34,7 @@ package com.smartdevicelink.proxy.rpc; import android.support.annotation.NonNull; import com.smartdevicelink.proxy.RPCStruct; +import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason; import java.util.ArrayList; import java.util.Hashtable; @@ -96,34 +97,33 @@ public class AppServicesCapabilities extends RPCStruct { if(updatedAppServiceCapabilities == null){ return false; } - final List<AppServiceCapability> appServiceCapabilities = getAppServices(); - if(appServiceCapabilities == null || appServiceCapabilities.isEmpty()){ - //If this list is null or empty, just copy the updated list into this object - setAppServices(updatedAppServiceCapabilities); - return true; + List<AppServiceCapability> appServiceCapabilities = getAppServices(); + + if(appServiceCapabilities == null){ + //If there are currently no app services, create one to iterate over with no entries + appServiceCapabilities = new ArrayList<>(0); } //Create a shallow copy for us to alter while iterating through the original list List<AppServiceCapability> tempList = new ArrayList<>(appServiceCapabilities); - boolean updated; for(AppServiceCapability updatedAppServiceCapability: updatedAppServiceCapabilities){ - updated = false; if(updatedAppServiceCapability != null) { + //First search if the record exists in the current list and remove it if so for (AppServiceCapability appServiceCapability : appServiceCapabilities) { if (updatedAppServiceCapability.matchesAppService(appServiceCapability)) { tempList.remove(appServiceCapability); //Remove the old entry - tempList.add(updatedAppServiceCapability); //Add the new entry - updated = true; break; } } - } - if(!updated){ - //If the updated App Service capability doesn't exist in the old list, just add it - tempList.add(updatedAppServiceCapability); + if(!ServiceUpdateReason.REMOVED.equals(updatedAppServiceCapability.getUpdateReason())){ + //If the app service was anything but removed, we can add the updated + //record back into the temp list. If it was REMOVED as the update reason + //it will not be added back. + tempList.add(updatedAppServiceCapability); + } } } |