Modify app manager payload for old android agent versions

revert-dabc3590
Saad Sahibjan 5 years ago
parent a704b0da66
commit 0b4fe92c7e

@ -192,6 +192,14 @@ public final class AndroidConstants {
public static final String IS_ACTIVE = "isActive"; public static final String IS_ACTIVE = "isActive";
public static final String FREE_SUB_METHOD = "FREE"; public static final String FREE_SUB_METHOD = "FREE";
public static final String PAID_SUB_METHOD = "PAID"; public static final String PAID_SUB_METHOD = "PAID";
public static final String TYPE = "type";
public static final String ENTERPRISE = "ENTERPRISE";
public static final String WEB_CLIP = "WEB_CLIP";
public static final String WEBAPP = "WEBAPP";
public static final String PACKAGE_NAME = "packageName";
public static final String APP_IDENTIFIER = "appIdentifier";
public static final String AGENT_VERSION = "AGENT_VERSION";
} }
public final class ApplicationInstall { public final class ApplicationInstall {
@ -220,6 +228,9 @@ public final class AndroidConstants {
public static final String BEHAVIOUR_WHITELISTED_APPS_ONLY = "whitelist"; public static final String BEHAVIOUR_WHITELISTED_APPS_ONLY = "whitelist";
public static final String INSTALL = "INSTALL"; public static final String INSTALL = "INSTALL";
public static final String UNINSTALL = "UNINSTALL"; public static final String UNINSTALL = "UNINSTALL";
public static final String INSTALL_APPLICATION = "INSTALL_APPLICATION";
public static final String UNINSTALL_APPLICATION = "UNINSTALL_APPLICATION";
} }
public final class ErrorMessages { public final class ErrorMessages {

@ -946,7 +946,7 @@ public class AndroidServiceImpl implements AndroidService {
throw new DeviceManagementException(msg, e); throw new DeviceManagementException(msg, e);
} }
try { try {
return MobileDeviceManagementUtil.getPendingOperations(device); return MobileDeviceManagementUtil.getPendingOperations(device, deviceIdentifier);
} catch (OperationManagementException e) { } catch (OperationManagementException e) {
String msg = "Issue in retrieving operation management service instance"; String msg = "Issue in retrieving operation management service instance";
log.error(msg, e); log.error(msg, e);

@ -43,6 +43,7 @@ import com.google.gson.JsonNull;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -81,6 +82,7 @@ import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature;
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException; import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException; import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager;
import org.wso2.carbon.device.mgt.core.operation.mgt.util.OperationIdComparator;
import org.wso2.carbon.device.mgt.core.search.mgt.impl.Utils; import org.wso2.carbon.device.mgt.core.search.mgt.impl.Utils;
import org.wso2.carbon.device.mgt.mobile.android.common.AndroidConstants; import org.wso2.carbon.device.mgt.mobile.android.common.AndroidConstants;
import org.wso2.carbon.device.mgt.mobile.android.common.bean.DeviceState; import org.wso2.carbon.device.mgt.mobile.android.common.bean.DeviceState;
@ -101,6 +103,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -138,10 +141,16 @@ public class MobileDeviceManagementUtil {
} }
public static List<? extends Operation> getPendingOperations public static List<? extends Operation> getPendingOperations
(Device device) throws OperationManagementException { (Device device, DeviceIdentifier deviceIdentifier) throws OperationManagementException {
List<? extends Operation> operations; List<? extends Operation> operations = AndroidDeviceManagementDataHolder.getInstance()
operations = AndroidDeviceManagementDataHolder.getInstance().getDeviceManagementProviderService() .getDeviceManagementProviderService().getPendingOperations(device);
.getPendingOperations(device); if (operations != null) {
List<Operation> pendingOperations = new ArrayList<>(operations);
if (!pendingOperations.isEmpty() && deviceIdentifier != null) {
handleAppManagerPayloadForOldAgent(deviceIdentifier, pendingOperations);
operations = pendingOperations;
}
}
return operations; return operations;
} }
@ -227,6 +236,62 @@ public class MobileDeviceManagementUtil {
} }
} }
/**
* App Installation and App Un-installation payloads are modified as per old app manager payloads to
* support old android agent versions. Old android agent versions are detected on the unavailability of
* AGENT_VERSION value.
*
* @param deviceIdentifier of the Device
* @param operations list of pending operations
* @throws OperationManagementException when there is an error in retreiveing device information
*/
private static void handleAppManagerPayloadForOldAgent(
DeviceIdentifier deviceIdentifier, List<Operation> operations) throws OperationManagementException {
List<Operation> appManagerOperations = new ArrayList<>();
Iterator<? extends Operation> operationIterator = operations.iterator();
while (operationIterator.hasNext()) {
Operation op = operationIterator.next();
if (AndroidConstants.ApplicationInstall.INSTALL_APPLICATION.equals(op.getCode())
|| AndroidConstants.ApplicationInstall.UNINSTALL_APPLICATION.equals(op.getCode())) {
DeviceInfo deviceInfo;
try {
deviceInfo = AndroidDeviceManagementDataHolder.getInstance().getDeviceInformationManager()
.getDeviceInfo(deviceIdentifier);
} catch (DeviceDetailsMgtException e) {
String msg = "Error occurred while retrieving device info from DeviceInformationManagerService "
+ "of device " + deviceIdentifier;
log.error(msg);
throw new OperationManagementException(msg, e);
}
if (deviceInfo != null
&& deviceInfo.getDeviceDetailsMap() != null
&& !deviceInfo.getDeviceDetailsMap().isEmpty()
&& StringUtils.isBlank(deviceInfo.getDeviceDetailsMap().get(
AndroidConstants.ApplicationProperties.AGENT_VERSION))) {
JSONObject appPayload = new JSONObject(op.getPayLoad().toString());
String appType = appPayload.getString(AndroidConstants.ApplicationProperties.TYPE);
if (AndroidConstants.ApplicationProperties.ENTERPRISE.equals(appType)) {
appPayload.put(AndroidConstants.ApplicationProperties.PACKAGE_NAME,
appPayload.getString(AndroidConstants.ApplicationProperties.APP_IDENTIFIER));
op.setPayLoad(appPayload.toString());
appManagerOperations.add(op);
operationIterator.remove();
} else if (AndroidConstants.ApplicationProperties.WEB_CLIP.equals(appType)) {
appPayload.put(AndroidConstants.ApplicationProperties.TYPE,
AndroidConstants.ApplicationProperties.WEBAPP);
op.setPayLoad(appPayload.toString());
appManagerOperations.add(op);
operationIterator.remove();
}
}
}
}
if (!appManagerOperations.isEmpty()) {
operations.addAll(appManagerOperations);
operations.sort(new OperationIdComparator());
}
}
private static void updateApplicationList(Operation operation, Device device) private static void updateApplicationList(Operation operation, Device device)
throws org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException { throws org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException {
// Parsing json string to get applications list. // Parsing json string to get applications list.
@ -524,7 +589,7 @@ public class MobileDeviceManagementUtil {
public static void updateDisEnrollOperationStatus(Device device) public static void updateDisEnrollOperationStatus(Device device)
throws DeviceManagementException { throws DeviceManagementException {
try { try {
List<? extends Operation> pendingOperations = getPendingOperations(device); List<? extends Operation> pendingOperations = getPendingOperations(device, null);
if (pendingOperations != null && !pendingOperations.isEmpty()) { if (pendingOperations != null && !pendingOperations.isEmpty()) {
for (Operation operation : pendingOperations) { for (Operation operation : pendingOperations) {
operation.setStatus(Operation.Status.ERROR); operation.setStatus(Operation.Status.ERROR);

Loading…
Cancel
Save