summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilal Alsharifi <599206+bilal-alsharifi@users.noreply.github.com>2019-04-08 12:17:33 -0400
committerGitHub <noreply@github.com>2019-04-08 12:17:33 -0400
commit1e07d7b3a435cda73de14702169001758ed9427d (patch)
tree10655f6acb9c9fb1f4285a69bdfc99bacb8d6b37
parent38b9240ffc54d97485e7818536ec2f7db0ed9e3f (diff)
parentee234532244105d2973cfc82591d954f06f56472 (diff)
downloadsdl_android-1e07d7b3a435cda73de14702169001758ed9427d.tar.gz
Merge pull request #1034 from smartdevicelink/bugfix/scm_remove_app_service
Handle AppService Removed reason in SCM
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java20
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java13
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java15
-rw-r--r--base/src/main/java/com/smartdevicelink/proxy/rpc/AppServicesCapabilities.java26
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);
+ }
}
}