mirror of
https://repository.entgra.net/community/device-mgt-plugins.git
synced 2025-09-16 23:42:15 +00:00
Resolving #642 : Improve UX on location updates for Android
(cherry picked from commit 64b1b33)
This commit is contained in:
parent
4c0e505008
commit
51a613f167
@ -20,14 +20,22 @@ package org.wso2.carbon.mdm.services.android.services.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.*;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
|
||||
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||
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.DeviceInformationManager;
|
||||
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||
import org.wso2.carbon.mdm.services.android.bean.ErrorResponse;
|
||||
import org.wso2.carbon.mdm.services.android.bean.wrapper.AndroidApplication;
|
||||
import org.wso2.carbon.mdm.services.android.bean.wrapper.AndroidDevice;
|
||||
@ -38,7 +46,6 @@ import org.wso2.carbon.mdm.services.android.util.AndroidConstants;
|
||||
import org.wso2.carbon.mdm.services.android.util.AndroidDeviceUtils;
|
||||
import org.wso2.carbon.mdm.services.android.util.Message;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
|
||||
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||
|
||||
import javax.validation.Valid;
|
||||
@ -219,8 +226,30 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
|
||||
boolean status = AndroidAPIUtils.getDeviceManagementService().enrollDevice(device);
|
||||
if (status) {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(androidDevice.getDeviceIdentifier(),
|
||||
device.getType());
|
||||
|
||||
//Immediately update location information from initial payload
|
||||
DeviceLocation deviceLocation = extractLocation(deviceIdentifier, androidDevice.getProperties());
|
||||
if (deviceLocation != null) {
|
||||
try {
|
||||
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
||||
DeviceInformationManager informationManager =
|
||||
(DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null);
|
||||
|
||||
informationManager.addDeviceLocation(deviceLocation);
|
||||
} catch (DeviceDetailsMgtException e) {
|
||||
String msg = "Error occurred while updating the device location upon android " +
|
||||
"', which carries the id '" + androidDevice.getDeviceIdentifier() + "'";
|
||||
log.error(msg, e);
|
||||
throw new UnexpectedServerErrorException(
|
||||
new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build());
|
||||
}
|
||||
}
|
||||
|
||||
//Adding Tasks to get device information
|
||||
List<DeviceIdentifier> deviceIdentifiers = new ArrayList<>();
|
||||
deviceIdentifiers.add(new DeviceIdentifier(androidDevice.getDeviceIdentifier(), device.getType()));
|
||||
deviceIdentifiers.add(deviceIdentifier);
|
||||
|
||||
List<String> taskOperaions = new ArrayList<>();
|
||||
taskOperaions.add(AndroidConstants.OperationCodes.APPLICATION_LIST);
|
||||
@ -416,4 +445,41 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the device location
|
||||
*
|
||||
* @param deviceIdentifier
|
||||
* @param properties
|
||||
* @return returns null when location not found
|
||||
*/
|
||||
private DeviceLocation extractLocation(DeviceIdentifier deviceIdentifier, List<Device.Property> properties)
|
||||
throws DeviceManagementException {
|
||||
|
||||
DeviceLocation location = null;
|
||||
String latitude = "", longitude = "";
|
||||
|
||||
if (properties == null) return null;
|
||||
|
||||
for (Device.Property property : properties) {
|
||||
String propertyName = property.getName();
|
||||
if (propertyName == null) continue;
|
||||
if (propertyName.equals("LATITUDE")) {
|
||||
latitude = property.getValue();
|
||||
if (!longitude.isEmpty()) break;
|
||||
} else if (propertyName.equals("LONGITUDE")) {
|
||||
longitude = property.getValue();
|
||||
if (!latitude.isEmpty()) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!latitude.isEmpty() && !longitude.isEmpty()) {
|
||||
location = new DeviceLocation();
|
||||
location.setLatitude(Double.valueOf(latitude));
|
||||
location.setLongitude(Double.valueOf(longitude));
|
||||
location.setDeviceIdentifier(deviceIdentifier);
|
||||
Device savedDevice = AndroidAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier);
|
||||
location.setDeviceId(savedDevice.getId());
|
||||
}
|
||||
return location;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user