merged with origin IoTS-1.0.0

revert-dabc3590
ayyoob 8 years ago
commit bd05fb721a

@ -18,11 +18,11 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>extensions</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<artifactId>org.wso2.carbon.appmgt.mdm.osgiconnector</artifactId>
<packaging>bundle</packaging>
<name>WSO2 Carbon - App Manager WSO2 MDM OSGI Connector Component</name>

@ -68,8 +68,8 @@ public class IOSApplicationOperationUtil {
appStoreApplication.setPreventBackupOfAppData((Boolean) application.getProperties().
get(MDMAppConstants.IOSConstants.IS_PREVENT_BACKUP));
appStoreApplication.setBundleId(application.getId());
appStoreApplication.setiTunesStoreID((Integer) application.getProperties().
get(MDMAppConstants.IOSConstants.I_TUNES_ID));
appStoreApplication.setiTunesStoreID(Integer.parseInt((String)application.getProperties().
get(MDMAppConstants.IOSConstants.I_TUNES_ID)));
operation.setCode(MDMAppConstants.IOSConstants.OPCODE_INSTALL_STORE_APPLICATION);
operation.setType(Operation.Type.COMMAND);
operation.setPayLoad(appStoreApplication.toJSON());
@ -106,7 +106,7 @@ public class IOSApplicationOperationUtil {
operation.setCode(MDMAppConstants.IOSConstants.OPCODE_REMOVE_APPLICATION);
operation.setType(Operation.Type.PROFILE);
RemoveApplication removeApplication = new RemoveApplication();
removeApplication.setBundleId(application.getIdentifier());
removeApplication.setBundleId(application.getPackageName());
operation.setPayLoad(removeApplication.toJSON());
return operation;
}

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>androidsense-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -3,7 +3,7 @@
<parent>
<artifactId>androidsense-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -84,8 +84,7 @@ public class AndroidSenseServiceImpl implements AndroidSenseService {
log.error(e.getErrorMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
} catch (OperationManagementException e) {
String msg = "Error occurred while executing command operation to send keywords";
log.error(msg, e);
log.error("Error occurred while executing command operation to send keywords", e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@ -123,8 +122,7 @@ public class AndroidSenseServiceImpl implements AndroidSenseService {
} catch (DeviceAccessAuthorizationException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
} catch (OperationManagementException e) {
String msg = "Error occurred while executing command operation to set threashold";
log.error(msg, e);
log.error("Error occurred while executing command operation to set threashold", e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@ -163,8 +161,7 @@ public class AndroidSenseServiceImpl implements AndroidSenseService {
log.error(e.getErrorMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).build();
} catch (OperationManagementException e) {
String msg = "Error occurred while executing command operation to remove words";
log.error(msg, e);
log.error("Error occurred while executing command operation to remove words", e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
@ -300,5 +297,4 @@ public class AndroidSenseServiceImpl implements AndroidSenseService {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).entity(false).build();
}
}
}

@ -3,10 +3,10 @@ package org.wso2.carbon.device.mgt.iot.androidsense.service.impl.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.analytics.api.AnalyticsDataAPIUtil;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.commons.SortByField;
import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
@ -88,7 +88,7 @@ public class APIUtil {
sortByFields);
List<String> recordIds = getRecordIds(resultEntries);
AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, null, recordIds);
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataServiceUtils.listRecords(
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataAPIUtil.listRecords(
analyticsDataAPI, response));
List<SensorRecord> sortedSensorData = getSortedSensorData(sensorDatas, resultEntries);
return sortedSensorData;

@ -63,5 +63,4 @@
<method>POST</method>
<scope>android_sense_user</scope>
</Permission>
</PermissionConfiguration>

@ -22,7 +22,7 @@
<parent>
<artifactId>androidsense-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -74,9 +74,9 @@
<div class="panel-body">
<div id="operations-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Operations Log . . .
<br>
<br>

@ -41,7 +41,7 @@
</div>
<div class="wr-input-control wr-btn-grp">
<button id="save-general-btn" class="wr-btn" onclick="addConfiguration();">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Save&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Save
</button>
</div>
</div>

@ -42,18 +42,18 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">STEP 01</span>
&nbsp;&nbsp;&nbsp;Go ahead and click [Enroll Device].
Go ahead and click [Enroll Device].
</li>
<li class="padding-top-double">
<span class="circle">STEP 02</span>
&nbsp;&nbsp;&nbsp;You can either scan the QR code or directly download Android agent.
You can either scan the QR code or directly download Android agent.
</li>
<li class="padding-top-double">
<span class="circle">STEP 03</span>
&nbsp;&nbsp;&nbsp;Install Android agent into your Android Device.
Install Android agent into your Android Device.
</li>
<li class="padding-top-double"><span class="circle">STEP 04</span>
&nbsp;&nbsp;&nbsp;Proceed to [Prepare] section.
Proceed to [Prepare] section.
</ul>
<br>
<a href="#" class="download-link btn-operations">
@ -84,7 +84,7 @@
<div class="buttons">
<a href="#" id="device-401-link" class="blue-button">
Goto Login Page
</a>&nbsp;&nbsp;
</a>
<a href="#" onclick="hidePopup();" class="btn-operations">
Cancel
</a>
@ -147,17 +147,17 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;Connect Android device to network.
Connect Android device to network.
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Start Android Sense app in your device.
Start Android Sense app in your device.
</li>
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;Fill login form with the credentials.
<i>(Use server URL as [&nbsp;https://&lt;WSO2_IoT_SERVER_HOST&gt;:&lt;
HTTPS_SERVER_PORT&gt;&nbsp;] and click on
Fill login form with the credentials.
<i>(Use server URL as [ https://&lt;WSO2_IoT_SERVER_HOST&gt;:&lt;
HTTPS_SERVER_PORT&gt; ] and click on
<strong>Register Device</strong> button.)</i>
</li>
<li>
@ -169,7 +169,7 @@
<li class="padding-top-double">
<span class="circle">04</span>
&nbsp;&nbsp;&nbsp;Once the device is enrolled, click on <strong>[+]</strong> button to
Once the device is enrolled, click on <strong>[+]</strong> button to
select the sensors.
<a href="{{@unit.publicUri}}/images/selectSensorView.png" target="_blank"
class="padding-top-double">
@ -178,7 +178,7 @@
</li>
<li class="padding-top-double">
<span class="circle">05</span>
&nbsp;&nbsp;&nbsp;Click on <i>[Publish data]</i> button to publish sensor readings to
Click on <i>[Publish data]</i> button to publish sensor readings to
IoT server.
<a href="{{@unit.publicUri}}/images/publishDataView.png" target="_blank"
class="padding-top-double">
@ -198,7 +198,7 @@
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>
&nbsp;&nbsp;&nbsp;You can view all your connected devices
You can view all your connected devices
<a href="{{@app.context}}/devices">[Device Management]</a> page.
</li>
<li class="padding-top-double">
@ -206,14 +206,14 @@
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>
&nbsp;&nbsp;&nbsp;You can select any one of your connected devices for available
You can select any one of your connected devices for available
operations and Real-Time data monitoring.
</li>
<li class="padding-top-double">
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>&nbsp;&nbsp;&nbsp;For historical analytics of sensor data navigate to device
</span> For historical analytics of sensor data navigate to device
analytics page.
</li>
</ul>
@ -237,7 +237,7 @@
<i class="fw fw-add fw-stack-1x fw-inverse"></i>
</span>
</span>
&nbsp;&nbsp;Add your new mobile device to {{@app.conf.appName}}
Add your new mobile device to {{@app.conf.appName}}
</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>arduino-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>arduino-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -7,7 +7,7 @@ import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDrillDownRequest;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.commons.SortByField;
import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils;
import org.wso2.carbon.analytics.api.AnalyticsDataAPIUtil;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
@ -81,7 +81,7 @@ public class APIUtil {
sortByFields);
List<String> recordIds = getRecordIds(resultEntries);
AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, null, recordIds);
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataServiceUtils.listRecords(
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataAPIUtil.listRecords(
analyticsDataAPI, response));
List<SensorRecord> sortedSensorData = getSortedSensorData(sensorDatas, resultEntries);
return sortedSensorData;

@ -23,7 +23,7 @@
<parent>
<artifactId>arduino-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -64,9 +64,9 @@
<div class="panel-body">
<div id="operations-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Operations Log . . .
<br>
<br>

@ -52,7 +52,7 @@
</div>
<div class="wr-input-control wr-btn-grp">
<button id="save-general-btn" class="wr-btn" onclick="addConfiguration();">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Save&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Save
</button>
</div>
</div>

@ -41,24 +41,24 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">ITEM 01</span>
&nbsp;&nbsp;&nbsp;Arduino UNO Board.
Arduino UNO Board.
</li>
<li class="padding-top-double">
<span class="circle">ITEM 02</span>
&nbsp;&nbsp;&nbsp;Adafruit Wifi Shield for Arduino.
Adafruit Wifi Shield for Arduino.
</li>
<li class="padding-top-double">
<span class="circle">ITEM 03</span>
&nbsp;&nbsp;&nbsp;LED bulb connected to Pin 13.
LED bulb connected to Pin 13.
<i>(If not available, will use the one on the board.)</i>
</li>
<li class="padding-top-double">
<span class="circle">ITEM 04</span>
&nbsp;&nbsp;&nbsp;Resister( e.g 330 ohms )
Resister( e.g 330 ohms )
</li>
<li class="padding-top-double">
<span class="circle">STEP 05</span>
&nbsp;&nbsp;&nbsp;Proceed to [Prepare] section.
Proceed to [Prepare] section.
</ul>
<br>
<a href="/api-store/apis/info?name={{@uriParams.deviceType}}&version=1.0.0&provider=admin"
@ -90,7 +90,7 @@
<input type="hidden" class="deviceType" name="deviceType"
value="{{@uriParams.deviceType}}"/>
<input type="hidden" class="sketchType" name="sketchType"
value="{{@uriParams.deviceType}}"/> &nbsp;&nbsp;
value="{{@uriParams.deviceType}}"/>
</div>
</div>
<div class="buttons" style="padding-bottom: 0px">
@ -134,7 +134,7 @@
<div class="buttons">
<a href="#" id="device-401-link" class="blue-button">
Goto Login Page
</a>&nbsp;&nbsp;
</a>
<a href="#" onclick="hidePopup();" class="btn-operations">
Cancel
</a>
@ -196,11 +196,11 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;Wifi-Shield mounted onto the Arduino-UNO board
Wifi-Shield mounted onto the Arduino-UNO board
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Connect LED bulb to arduino as follows
Connect LED bulb to arduino as follows
<br/><br/>
<a href="{{@unit.publicUri}}/images/schematicsGuide.png" target="_blank">
<img src="{{@unit.publicUri}}/images/schematicsGuide.png" class="img-responsive">
@ -210,20 +210,20 @@
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;Download Arduino-Sketch from [Download Sketch] link above.
Download Arduino-Sketch from [Download Sketch] link above.
</li>
<li class="padding-top-double">
<span class="circle">04</span>
&nbsp;&nbsp;&nbsp;Unzip the downloaded Arduino Agent
Unzip the downloaded Arduino Agent
</li>
<li class="padding-top-double">
<span class="circle">05</span>
&nbsp;&nbsp;&nbsp;Create a folder called "ArduinoBoardSketch" and move all source files
Create a folder called "ArduinoBoardSketch" and move all source files
inside
</li>
<li class="padding-top-double">
<span class="circle">06</span>
&nbsp;&nbsp;&nbsp;Open ArduinoBoardSketch.h and provide appropriate values for
Open ArduinoBoardSketch.h and provide appropriate values for
<i>[WLAN_SSID]</i>,
<i>[WLAN_PASS]</i>,
<i>[SERVICE_PORT]</i>,
@ -233,22 +233,22 @@
</li>
<li class="padding-top-double">
<span class="circle">07</span>
&nbsp;&nbsp;&nbsp;Burn the sketch onto your Arduino board and let the program run.
Burn the sketch onto your Arduino board and let the program run.
</li>
<li class="padding-top-double">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>
&nbsp;&nbsp;&nbsp;Arduino will publish it's internal temperature to WSO2-IoT-Server
Arduino will publish it's internal temperature to WSO2-IoT-Server
<br/><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>
&nbsp;&nbsp;&nbsp;LED on <i>PIN 13</i> can be controlled from Device Management page.
LED on <i>PIN 13</i> can be controlled from Device Management page.
</li>
</ul>
<br>
@ -261,17 +261,17 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;You can view all your connected devices at
You can view all your connected devices at
<a href="{{@app.context}}/devices">[Device Management]</a> page.
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Select one of connected devices and check for available control
Select one of connected devices and check for available control
operations and monitor Real-Time data.
</li>
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;You can also view analytics of the data published to IoT-Server by
You can also view analytics of the data published to IoT-Server by
navigating to Device Analytics page.
</li>
</ul>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-analytics</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -20,7 +20,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -20,7 +20,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -20,7 +20,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -20,7 +20,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -20,7 +20,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -22,7 +22,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -360,7 +360,7 @@ public class UIEventAdapter implements OutputEventAdapter {
// fetch the queryString Key:Value pair map of the given session.
Map<String, String> queryParamValuePairs = webSocketSessionUtil.getQueryParamValuePairs();
if (queryParamValuePairs != null) {
if (queryParamValuePairs != null && !queryParamValuePairs.isEmpty()) {
// fetch the different attribute values received as part of the current event.
Object[] eventMetaData = event.getMetaData();
Object[] eventCorrelationData = event.getCorrelationData();

@ -114,11 +114,9 @@ public class OAuthTokenValidaterStubFactory extends BasePoolableObjectFactory {
client.setOptions(options);
if (hostURL.getProtocol().equals("https")) {
// set up ssl factory since axis2 https transport is used.
EasySSLProtocolSocketFactory sslProtocolSocketFactory =
createProtocolSocketFactory();
Protocol authhttps = new Protocol(hostURL.getProtocol(),
(ProtocolSocketFactory) sslProtocolSocketFactory,
hostURL.getPort());
EasySSLProtocolSocketFactory sslProtocolSocketFactory = createProtocolSocketFactory();
Protocol authhttps = new Protocol(hostURL.getProtocol()
, (ProtocolSocketFactory) sslProtocolSocketFactory, hostURL.getPort());
Protocol.registerProtocol(hostURL.getProtocol(), authhttps);
options.setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, authhttps);
}

@ -1,17 +1,17 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* you may obtain a copy of the License at
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@ -35,7 +35,7 @@ public class WebSocketSessionRequest {
private static final String QUERY_STRING_SEPERATOR = "&";
private static final String QUERY_KEY_VALUE_SEPERATOR = "=";
private Map<String, String> queryParamValuePairs = null;
private Map<String, String> queryParamValuePairs = new HashMap<>();
private Session session;
public WebSocketSessionRequest(Session session) {
@ -65,9 +65,6 @@ public class WebSocketSessionRequest {
log.warn("Invalid query string [" + queryString + "] passed in.");
break;
}
if (queryParamValuePairs == null) {
queryParamValuePairs = new HashMap<>();
}
queryParamValuePairs.put(thisQueryParamPair[0], thisQueryParamPair[1]);
}
}

@ -20,7 +20,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

@ -23,7 +23,7 @@
<parent>
<artifactId>iot-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -74,8 +74,8 @@
<input type="{{type}}" id="{{name}}" placeholder="{{name}}" class="form-control" data-param-type="query" value="{{value}}" />
<br />
{{/each}}
<button id="btnSend" type="button" onclick="submitForm('form-{{operation}}')" class="btn btn-default">&nbsp;&nbsp;&nbsp;&nbsp;Send
to Device&nbsp;&nbsp;&nbsp;&nbsp;</button>
<button id="btnSend" type="button" onclick="submitForm('form-{{operation}}')" class="btn btn-default"> Send
to Device </button>
<label id="lblSending" class="wr-input-label hidden"><i
class="fw fw-lifecycle fw-spin fw-2x"></i> Sending..</label>
<label id="lblSent" class="wr-input-label hidden"><i

@ -157,7 +157,7 @@
<input id="user-roles-radio-btn" type="radio"
name="select-users-radio-btn" class="select-users-radio"
checked/>
<span class="helper">&nbsp;Set user role(s)</span>
<span class="helper"> Set user role(s)</span>
</label>
{{/if}}
{{#if permissions.LIST_USERS}}
@ -165,7 +165,7 @@
<input id="users-radio-btn" type="radio"
name="select-users-radio-btn"
class="select-users-radio"/>
<span class="helper">&nbsp;Set user(s)</span>
<span class="helper"> Set user(s)</span>
</label>
{{/if}}
<!--
@ -174,7 +174,7 @@
<input id="groups-radio-btn" type="radio"
name="select-users-radio-btn"
class="select-users-radio"/>
<span class="helper">&nbsp;Set groups(s)</span>
<span class="helper"> Set groups(s)</span>
</label>
{{/if}}
-->

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>raspberrypi-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>raspberrypi-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -7,7 +7,7 @@ import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDrillDownRequest;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.commons.SortByField;
import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils;
import org.wso2.carbon.analytics.api.AnalyticsDataAPIUtil;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
@ -78,7 +78,7 @@ public class APIUtil {
sortByFields);
List<String> recordIds = getRecordIds(resultEntries);
AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, null, recordIds);
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataServiceUtils.listRecords(
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataAPIUtil.listRecords(
analyticsDataAPI, response));
List<SensorRecord> sortedSensorData = getSortedSensorData(sensorDatas, resultEntries);
return sortedSensorData;

@ -23,7 +23,7 @@
<parent>
<artifactId>raspberrypi-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -64,9 +64,9 @@
<div class="panel-body">
<div id="operations-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Operations Log . . .
<br>
<br>

@ -62,7 +62,7 @@
</div>
<div class="wr-input-control wr-btn-grp">
<button id="save-general-btn" class="wr-btn" onclick="addConfiguration();">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Save&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Save
</button>
</div>
</div>

@ -40,28 +40,28 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">ITEM 01</span>
&nbsp;&nbsp;&nbsp;Raspberry Pi with SD Card(Internet Enabled [Wifi or Ethernet]).
Raspberry Pi with SD Card(Internet Enabled [Wifi or Ethernet]).
</li>
<li class="padding-top-double">
<span class="circle">ITEM 02</span>
&nbsp;&nbsp;&nbsp;Adafruit DHT11 Temperature Sensor.
Adafruit DHT11 Temperature Sensor.
</li>
<li class="padding-top-double">
<span class="circle">ITEM 03</span>
&nbsp;&nbsp;&nbsp;LED Bulb.
LED Bulb.
</li>
<li class="padding-top-double">
<span class="circle">ITEM 04</span>
&nbsp;&nbsp;&nbsp;Resister (eg : 470 ohm).
Resister (eg : 470 ohm).
</li>
<li class="padding-top-double">
<span class="circle">STEP 05</span>
&nbsp;&nbsp;&nbsp;Proceed to [Prepare] section.
Proceed to [Prepare] section.
</ul>
<br>
<a href="/api-store/apis/info?name={{@uriParams.deviceType}}&version=1.0.0&provider=admin"
class="btn-operations"
target="_blank"><i class="fw fw-api"></i> View API</i> &nbsp;
target="_blank"><i class="fw fw-api"></i> View API</i>
</a>
<a href="#" class="download-link btn-operations">
<i class="fw fw-download"></i>Download Agent
@ -93,11 +93,11 @@
</div>
<div class="buttons" style="padding-bottom: 0px">
<a class="btn btn-operations" onclick="downloadAgent()">Download Now</a>
&nbsp;&nbsp;
<a href="#" id="download-device-download-link"
class="btn btn-operations"> Copy Link
</a>
&nbsp;&nbsp;
</div>
</form>
</div>
@ -135,7 +135,7 @@
<div class="buttons">
<a href="#" id="device-401-link" class="blue-button">
Goto Login Page
</a>&nbsp;&nbsp;
</a>
<a href="#" onclick="hidePopup();" class="btn-operations">
Cancel
</a>
@ -195,43 +195,43 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;Connect RaspberryPi, DHT11 Temperature sensor and LED as per the
Connect RaspberryPi, DHT11 Temperature sensor and LED as per the
schematic below.
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Ensure your RaspberryPi Board can connect to Internet.
Ensure your RaspberryPi Board can connect to Internet.
</li>
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;Download RaspberryPi Agent via [Download Agent] button above.
Download RaspberryPi Agent via [Download Agent] button above.
(Alternatively you can use the "curl" command to directly download the Agent to your
RaspberryPi.)
</li>
<li class="padding-top-double">
<span class="circle">04</span>
&nbsp;&nbsp;&nbsp;Copy downloaded Agent into your RaspberryPi.
Copy downloaded Agent into your RaspberryPi.
</li>
<li class="padding-top-double">
<span class="circle">05</span>
&nbsp;&nbsp;&nbsp;Unzip the downloaded Agent and start terminal to run below commands.
Unzip the downloaded Agent and start terminal to run below commands.
</li>
<li class="padding-top-double">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>
&nbsp;&nbsp;&nbsp;[sudo ./testAgent.sh] &nbsp;&nbsp; - &nbsp;&nbsp; Script to test agent
[sudo ./testAgent.sh] - Script to test agent
functionality.
</li>
<li class="padding-top-double">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-right-arrow fw-stack-1x"></i>
</span>
&nbsp;&nbsp;&nbsp;[sudo ./startService.sh] &nbsp;&nbsp; - &nbsp;&nbsp; Use this to start
[sudo ./startService.sh] - Use this to start
agent as Daemon.
</li>
</ul>
@ -254,17 +254,17 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;You can view all your connected devices at
You can view all your connected devices at
<a href="{{@app.context}}/devices">[Device Management]</a> page.
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Select one of connected devices and check for available control
Select one of connected devices and check for available control
operations and monitor Real-Time data.
</li>
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;You can also view analytics of the data published to IoT-Server by
You can also view analytics of the data published to IoT-Server by
navigating to Device Analytics page.
</li>
</ul>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -23,7 +23,7 @@
<parent>
<artifactId>virtual-fire-alarm-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -23,7 +23,7 @@
<parent>
<artifactId>virtual-fire-alarm-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>virtual-fire-alarm-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -3,11 +3,10 @@ package org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.analytics.api.AnalyticsDataAPIUtil;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDrillDownRequest;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.commons.SortByField;
import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService;
@ -21,7 +20,6 @@ import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterService;
import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -79,7 +77,7 @@ public class APIUtil {
sortByFields);
List<String> recordIds = getRecordIds(resultEntries);
AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, null, recordIds);
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataServiceUtils.listRecords(
Map<String, SensorRecord> sensorDatas = createSensorData(AnalyticsDataAPIUtil.listRecords(
analyticsDataAPI, response));
List<SensorRecord> sortedSensorData = getSortedSensorData(sensorDatas, resultEntries);
return sortedSensorData;

@ -23,7 +23,7 @@
<parent>
<artifactId>virtual-fire-alarm-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>virtual-fire-alarm-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -23,7 +23,7 @@
<parent>
<artifactId>virtual-fire-alarm-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -66,9 +66,9 @@
<div class="panel-body">
<div id="policy-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Policies . . .
<br>
<br>
@ -95,9 +95,9 @@
<div class="panel-body">
<div id="operations-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Operations Log . . .
<br>
<br>

@ -63,7 +63,7 @@
</div>
<div class="wr-input-control wr-btn-grp">
<button id="save-general-btn-virtualfirealarm" class="wr-btn" onclick="addConfiguration();">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Save&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Save
</button>
</div>
</div>

@ -41,21 +41,21 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">STEP 01</span>
&nbsp;&nbsp;&nbsp;Go ahead and [Download] the Device.
Go ahead and [Download] the Device.
</li>
<li class="padding-top-double">
<span class="circle">STEP 02</span>
&nbsp;&nbsp;&nbsp;Proceed to [Prepare] section.
Proceed to [Prepare] section.
</li>
<li class="padding-top-double">
<span class="circle">STEP 03</span>
&nbsp;&nbsp;&nbsp;Read [Try Out] section to further experiment with the device.
Read [Try Out] section to further experiment with the device.
</li>
</ul>
<br>
<a href="/api-store/apis/info?name={{@uriParams.deviceType}}&version=1.0.0&provider=admin"
class="btn-operations"
target="_blank"><i class="fw fw-api"></i> View API</i> &nbsp;
target="_blank"><i class="fw fw-api"></i> View API</i>
</a>
<a href="#" class="download-link btn-operations">
<i class="fw fw-download"></i>Download Agent</a>
@ -71,7 +71,7 @@
<i class="fw fw-add fw-stack-1x fw-inverse"></i>
</span>
</span>
&nbsp;&nbsp;Add your new firealarm device to {{@app.conf.appName}}
Add your new firealarm device to {{@app.conf.appName}}
</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
</button>
@ -99,7 +99,7 @@
<input type="radio" name="sketchType" value="virtual_firealarm"
id="virtual_firealarm"
checked>
<label for="simple_agent">Simple Agent</label> &nbsp;&nbsp;
<label for="simple_agent">Simple Agent</label>
<input type="radio" name="sketchType"
value="virtual_firealarm_advanced"
id="virtual_firealarm_advanced">
@ -148,7 +148,7 @@
<div class="buttons">
<a href="#" id="device-401-link" class="blue-button">
Goto Login Page
</a>&nbsp;&nbsp;
</a>
<a href="#" onclick="hidePopup();" class="btn-operations">
Cancel
</a>
@ -209,19 +209,19 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;Download your VirtualFireAlarm using [Download Agent] button above.
Download your VirtualFireAlarm using [Download Agent] button above.
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Unzip the downloaded Agent.
Unzip the downloaded Agent.
</li>
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;Move into the unzipped Agent folder in the terminal.
Move into the unzipped Agent folder in the terminal.
</li>
<li class="padding-top-double">
<span class="circle">04</span>
&nbsp;&nbsp;&nbsp;Unzip the downloaded Agent and start terminal to run this command: [sh
Unzip the downloaded Agent and start terminal to run this command: [sh
start-device.sh]
</li>
</ul>
@ -244,17 +244,17 @@
<ul class="list-unstyled">
<li class="padding-top-double">
<span class="circle">01</span>
&nbsp;&nbsp;&nbsp;You can view all your connected devices at
You can view all your connected devices at
<a href="{{@app.context}}/devices">[Device Management]</a> page.
</li>
<li class="padding-top-double">
<span class="circle">02</span>
&nbsp;&nbsp;&nbsp;Select one of connected devices and check for available control
Select one of connected devices and check for available control
operations and monitor Real-Time data.
</li>
<li class="padding-top-double">
<span class="circle">03</span>
&nbsp;&nbsp;&nbsp;You can also view analytics of the data published to IoT-Server by
You can also view analytics of the data published to IoT-Server by
navigating to Device Analytics page.
</li>
</ul>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<artifactId>android-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -36,7 +36,7 @@ import java.util.List;
@XmlAccessorType(XmlAccessType.NONE)
@ApiModel(
value = "PlatformConfiguration",
description = "This class carries all information related to a Tenant configuration"
description = "This class carries all the information related to Android platform configurations."
)
public class AndroidPlatformConfiguration implements Serializable {
public static final int INVALID_NOTIFIER_FREQUENCY = -1;

@ -39,7 +39,7 @@ import java.util.List;
tags = {"devicemgt_android"})
@Api(value = "Android Device Management",
description = "This carries all the resources related to Android device management functionalities")
description = "This carries all the resources related to the Android device management functionalities.")
@Path("/devices")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ -51,13 +51,14 @@ public interface DeviceManagementService {
produces = MediaType.APPLICATION_JSON,
consumes = MediaType.APPLICATION_JSON,
httpMethod = "PUT",
value = "Update the application list of a device",
value = "Updating the Application Details on Android Devices",
notes = "Update the details of the applications that are installed on Android devices.",
tags = "Android Device Management"
)
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "OK. \n Application list has been updated successfully",
message = "OK. \n Successfully updated the application details.",
responseHeaders = {
@ResponseHeader(
name = "Content-Location",
@ -71,17 +72,17 @@ public interface DeviceManagementService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests.")}),
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request or validation error."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource to be deleted does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 415,
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
message = "Unsupported media type. \n The format of the requested entity was not supported."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
@ -91,14 +92,14 @@ public interface DeviceManagementService {
Response updateApplicationList(
@ApiParam(
name = "id",
value = "Device Identifier")
value = "The unique device identifier.")
@NotNull
@Size(min = 2 , max = 45)
@Pattern(regexp = "^[A-Za-z0-9]*$")
@PathParam("id") String id,
@ApiParam(
name = "applications",
value = "List of applications that need to be persisted against the device")
value = "The properties to update application details. Multiple applications can be updated using comma separated values.")
List<AndroidApplication> androidApplications);
@PUT
@ -106,16 +107,18 @@ public interface DeviceManagementService {
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "PUT",
value = "Get the operation list pending for the device",
value = "Getting the Pending Operation List",
responseContainer = "List",
notes = "The Android agent communicates with the server to get the operations that are queued up " +
"at the server end for a given device using via this particular resource",
"at the server end via this REST API." +
" While getting the pending operations the details of the operations executed at the device end is shared with the server. " +
"The server then updates the status of the operations that were carried out on the device.",
response = Operation.class,
tags = "Android Device Management")
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "OK. \n Successfully fetched the pending application list of the Android device.",
message = "OK. \n Successfully fetched the pending operations of the Android device.",
response = Operation.class,
responseContainer = "List",
responseHeaders = {
@ -128,33 +131,36 @@ public interface DeviceManagementService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests.")
}),
@ApiResponse(
code = 304,
message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
message = "Not Modified. \n Empty body because the client already has the latest version of the requested resource."),
@ApiResponse(
code = 406,
message = "Not Acceptable.\n The requested media type is not supported"),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Server error occurred while fetching policies.")
message = "Internal Server Error. \n Server error occurred while fetching the list of pending operations.")
})
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/android")
Response getPendingOperations(
@ApiParam(
name = "id",
value = "Device Identifier")
value = "The unique device identifier.",
required = true)
@PathParam("id") String id,
@ApiParam(
name = "If-Modified-Since",
value = "Validates if the requested variant has not been modified since the time specified",
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
"Example: Mon, 05 Jan 2014 15:10:00 +0200.",
required = false)
@HeaderParam("If-Modified-Since") String ifModifiedSince,
@ApiParam(
name = "resultOperations",
value = "Device Operation Status")
value = "Properties to update the device operations and their status.")
List<? extends Operation> resultOperations);
@POST
@ -162,17 +168,17 @@ public interface DeviceManagementService {
produces = MediaType.APPLICATION_JSON,
consumes = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Register an Android Device",
notes = "When carrying out device registration via an Android device, you need to initially install" +
" an Android Agent on the device, before being able to register the device with WSO2 EMM. Instead," +
value = "Registering an Android Device",
notes = "When registering an Android device, you need to install" +
" the Android Agent on the device, before being able to register the device with WSO2 EMM. Instead," +
" you can use this REST API to register an Android device with WSO2 EMM, without having to install" +
" an Android Agent on the respective device",
" an Android Agent. This API can be mainly used to test the device enrollment process.",
tags = "Android Device Management"
)
@ApiResponses(value = {
@ApiResponse(
code = 201,
message = "Created. \n Device enrollment has successfully been created",
message = "Created. \n Successfully created an instance of the device.",
responseHeaders = {
@ResponseHeader(
name = "Content-Location",
@ -186,11 +192,11 @@ public interface DeviceManagementService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests.")}),
@ApiResponse(
code = 303,
message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
message = "See Other. \n The source can be retrieved from the URL specified in the location header.",
responseHeaders = {
@ResponseHeader(
name = "Content-Location",
@ -200,14 +206,16 @@ public interface DeviceManagementService {
message = "Bad Request. \n Invalid request or validation error."),
@ApiResponse(
code = 415,
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
message = "Unsupported media type. \n The format of the requested entity was not supported.\n"),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
"Server error occurred while adding a new device.")
})
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/android")
Response enrollDevice(@ApiParam(name = "device", value = "Device Information to be enroll")
Response enrollDevice(@ApiParam(
name = "device",
value = "The properties required to enroll a device.")
@Valid AndroidDevice device);
@GET
@ -215,7 +223,7 @@ public interface DeviceManagementService {
@ApiOperation(
httpMethod = "GET",
value = "Getting the Registration Status of an Android Device",
notes = "Use this REST API to retrieve the registration status of an Android device",
notes = "Use this REST API to retrieve the registration status of an Android device.",
tags = "Android Device Management"
)
@ApiResponses(value = {
@ -232,12 +240,12 @@ public interface DeviceManagementService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests."),
}),
@ApiResponse(
code = 304,
message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
message = "Not Modified. \n Empty body because the client already has the latest version of the requested resource."),
@ApiResponse(
code = 406,
message = "Not Acceptable.\n The requested media type is not supported"),
@ -249,11 +257,13 @@ public interface DeviceManagementService {
Response isEnrolled(
@ApiParam(
name = "id",
value = "Device Identifier")
value = "The unique device identifier")
@PathParam("id") String id,
@ApiParam(
name = "If-Modified-Since",
value = "Validates if the requested variant has not been modified since the time specified",
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
required = false)
@HeaderParam("If-Modified-Since") String ifModifiedSince);
@ -262,14 +272,14 @@ public interface DeviceManagementService {
@ApiOperation(
httpMethod = "PUT",
value = "Updating the Registration Details of an Android Device",
notes = "Use this REST API to update the registration details of an Android device",
notes = "Use this REST API to update the registration details of an Android device.",
tags = "Android Device Management"
)
@ApiResponses(
value = {
@ApiResponse(
code = 200,
message = "OK. \n Device enrollment has been updated successfully",
message = "OK. \n Successfully updated the device enrollment details.",
responseHeaders = {
@ResponseHeader(
name = "Content-Location",
@ -283,17 +293,17 @@ public interface DeviceManagementService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests.")}),
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request or validation error."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource to be deleted does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 415,
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
message = "Unsupported media type. \n The format of the requested entity was not supported."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
@ -303,27 +313,27 @@ public interface DeviceManagementService {
Response modifyEnrollment(
@ApiParam(
name = "id",
value = "Device Identifier")
value = "The unique device identifier.")
@PathParam("id") String id,
@ApiParam(
name = "device",
value = "Device information to be modify") @Valid AndroidDevice androidDevice);
value = "The properties of required to update device enrollment details.") @Valid AndroidDevice androidDevice);
@DELETE
@Path("/{id}")
@ApiOperation(
httpMethod = "DELETE",
value = "Un-register an Android Device",
notes = "Use this REST API to un-register a specific Android device",
value = "Unregistering an Android Device",
notes = "Use this REST API to unregister an Android device.",
tags = "Android Device Management"
)
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "OK. \n Device has successfully been dis-enrolled"),
message = "OK. \n Successfully disenrolled the device."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource to be deleted does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
@ -333,7 +343,7 @@ public interface DeviceManagementService {
Response disEnrollDevice(
@ApiParam(
name = "id",
value = "Device Identifier")
value = "The unique device identifier.")
@PathParam("id") String id);
}

@ -34,8 +34,7 @@ import javax.ws.rs.core.Response;
context = "api/device-mgt/android/v1.0/configuration",
tags = {"devicemgt_android"})
@Api(value = "Android Configuration Management", description = "This API carries all resource associated with " +
"manipulating the general configurations of Android platform")
@Api(value = "Android Configuration Management", description = "This API carries all the resource used to mange the Android platform configurations.")
@Path("/configuration")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ -46,14 +45,14 @@ public interface DeviceTypeConfigurationService {
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting Android Platform Configurations",
notes = "Get the Android platform configuration details using this REST API",
notes = "Get the Android platform configuration details using this REST API.",
response = PlatformConfiguration.class,
tags = "Android Configuration Management"
)
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "OK. \n Successfully fetched Android platform configuration.",
message = "OK. \n Successfully fetched the Android platform configurations.",
response = PlatformConfiguration.class,
responseHeaders = {
@ResponseHeader(
@ -65,27 +64,29 @@ public interface DeviceTypeConfigurationService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests."),
}),
@ApiResponse(
code = 304,
message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
message = "Not Modified. \n Empty body because the client already has the latest version of the requested resource."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource to be deleted does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 406,
message = "Not Acceptable.\n The requested media type is not supported"),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Server error occurred while fetching Android platform configuration.")
message = "Internal Server Error. \n Server error occurred while fetching the Android platform configuration.")
})
@Permission(name = "View Configurations", permission = "/device-mgt/platform-configurations/view")
Response getConfiguration(
@ApiParam(
name = "If-Modified-Since",
value = "Validates if the requested variant has not been modified since the time specified",
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
required = false)
@HeaderParam("If-Modified-Since") String ifModifiedSince);
@ -94,14 +95,14 @@ public interface DeviceTypeConfigurationService {
consumes = MediaType.APPLICATION_JSON,
produces = MediaType.APPLICATION_JSON,
httpMethod = "PUT",
value = "Updating Android Platform Configuration.",
value = "Updating Android Platform Configurations",
notes = "Update the Android platform configurations using this REST API.",
tags = "Android Configuration Management"
)
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "OK. \n Android platform configuration has been updated successfully",
message = "OK. \n Successfully updated the Android platform configurations.",
responseHeaders = {
@ResponseHeader(
name = "Content-Location",
@ -115,26 +116,26 @@ public interface DeviceTypeConfigurationService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests.")}),
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request or validation error."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource to be deleted does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 415,
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
message = "Unsupported media type. \n The format of the requested entity was not supported."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
"Server error occurred while modifying Android platform configuration.")
"Server error occurred while modifying the Android platform configuration.")
})
@Permission(name = "Manage Configurations", permission = "/device-mgt/platform-configurations/manage")
Response updateConfiguration(
@ApiParam(name = "configuration",
value = "AndroidPlatformConfiguration")
value = "The properties to update the Android platform configurations.")
@Valid AndroidPlatformConfiguration androidPlatformConfiguration);
@GET
@ -143,9 +144,9 @@ public interface DeviceTypeConfigurationService {
@ApiOperation(
produces = MediaType.TEXT_PLAIN,
httpMethod = "GET",
value = "Getting the License Agreement for Android Device Registration",
value = "Getting the License Agreement for the Android Device Registration",
notes = "Use this REST API to retrieve the license agreement that is used for the Android device " +
"registration process",
"registration process.",
response = String.class,
tags = "Android Configuration Management")
@ApiResponses(value = {
@ -163,27 +164,29 @@ public interface DeviceTypeConfigurationService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests."),
}),
@ApiResponse(
code = 304,
message = "Not Modified. \n Empty body because the client has already the latest version of the requested resource."),
message = "Not Modified. \n Empty body because the client already has the latest version of the requested resource."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource to be deleted does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 406,
message = "Not Acceptable.\n The requested media type is not supported"),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Server error occurred while fetching Android license configuration.")
message = "Internal Server Error. \n Server error occurred while fetching the Android license configuration.")
})
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/android")
Response getLicense(
@ApiParam(
name = "If-Modified-Since",
value = "Validates if the requested variant has not been modified since the time specified",
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
"Example: Mon, 05 Jan 2014 15:10:00 +0200.",
required = false)
@HeaderParam("If-Modified-Since") String ifModifiedSince) throws AndroidAgentException;

@ -35,9 +35,9 @@ import javax.ws.rs.core.Response;
context = "api/device-mgt/android/v1.0/events",
tags = {"devicemgt_android"})
@Api(value = "Event Receiver", description = "Event publishing/retrieving related APIs.To enable Eventing need to" +
" configure as ref-https://docs.wso2.com/display/EMM210/Managing+Event+Publishing+with+WSO2+Data+Analytics+Server, " +
"https://docs.wso2.com/display/EMM210/Creating+a+New+Event+Stream+and+Receiver")
@Api(value = "Event Receiver", description = "Event publishing/retrieving related APIs. To enable event publishing/retrieving you need to" +
" configure WSO2 EMM as explained in https://docs.wso2.com/display/EMM220/Managing+Event+Publishing+with+WSO2+Data+Analytics+Server, " +
"https://docs.wso2.com/display/EMM220/Creating+a+New+Event+Stream+and+Receiver")
@Path("/events")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ -49,13 +49,13 @@ public interface EventReceiverService {
produces = MediaType.APPLICATION_JSON,
consumes = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Event publishing via REST API.",
notes = "Publish events received by the EMM Android client to WSO2 DAS using this API.",
value = "Publishing Events",
notes = "Publish events received by the WSO2 EMM Android client to the WSO2 Data Analytics Server (DAS) using this API.",
tags = "Event Receiver"
)
@ApiResponses(
value = {
@ApiResponse(code = 201, message = "Created. \n Event is published successfully. Location header " +
@ApiResponse(code = 201, message = "Created. \n Successfully published the event. Location header " +
"contains URL of newly enrolled device",
responseHeaders = {
@ResponseHeader(
@ -70,12 +70,12 @@ public interface EventReceiverService {
"Used by caches, or in conditional requests."),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource has been modified the last time.\n" +
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests.")
}),
@ApiResponse(
code = 303,
message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
message = "See Other. \n The source can be retrieved from the URL specified in the location header.",
responseHeaders = {
@ResponseHeader(
name = "Content-Location",
@ -85,7 +85,7 @@ public interface EventReceiverService {
message = "Bad Request. \n Invalid request or validation error."),
@ApiResponse(
code = 415,
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
message = "Unsupported media type. \n The format of the requested entity was not supported."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
@ -104,10 +104,10 @@ public interface EventReceiverService {
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting event details for a given time period.",
notes = "Get the event details of a device for a given time duration using this API.Request must contain " +
"the device identifier. Optionally, both, date from and date to value should be present to get " +
"alerts between times. Based on device type and the device identifier also filtering can be done" +
"(This cannot be combined with to and from parameters).",
notes = "Get the event details of a device for a given time duration using this API. The request must contain " +
"the device identifier. Optionally, both date from and date to value should be present to get " +
"alerts between a specified time. Filtering can also be done based on the device type and the device identifier." +
"(This cannot be combined with the to and from parameters).",
response = DeviceState.class,
responseContainer = "List",
tags = "Event Receiver"
@ -116,12 +116,11 @@ public interface EventReceiverService {
value = {
@ApiResponse(
code = 200,
message = "OK. \n Event details of a device for a given time duration have been successfully fetched",
message = "OK. \n Successfully fetched the event details of the specified device for a given time duration.",
response = DeviceState.class, responseContainer = "List"),
@ApiResponse(
code = 303,
message = "See Other. \n Source can be retrieved from the URL specified at" +
" the Location header.",
message = "See Other. \n The source can be retrieved from the URL specified in the location header.",
responseHeaders = {
@ResponseHeader(name = "Content-Location", description = "Source URL of the document.")
}),
@ -132,39 +131,44 @@ public interface EventReceiverService {
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request or validation error. You must provide" +
" the device identifier. Additionally, the device identifier can be combined with either the type" +
" OR date from and to."),
" the device identifier. Additionally, the device identifier can be combined with either the device type" +
" OR the from and to date."),
@ApiResponse(
code = 404,
message = "Not Found. \n Resource requested does not exist."),
message = "Not Found. \n The specified resource does not exist."),
@ApiResponse(
code = 500,
message = "Error occurred while getting published events for specific device.")
message = "Error occurred while getting the published events for the specified device.")
})
@Permission(name = "Publish Events to DAS", permission = "/device-mgt/devices/enroll/android")
Response retrieveAlerts(
@ApiParam(
name = "id",
value = "Device Identifier to be need to retrieve events.",
value = "The unique device identifier.",
required = true)
@Size(min = 2, max = 45)
@QueryParam("id") String deviceId,
@ApiParam(
name = "from",
value = "From Date.")
value = "Specify the time and date from when you want to get the data." +
"Provide the time and date format in the unix/epoch format as the value for {unixTimestamp}. Use a Epoch convertor, to convert the time and date to this format.")
@QueryParam("from") long from,
@ApiParam(
name = "to",
value = "To Date.")
value = "Specify the time and date up to when you require the data." +
"Provide the time and date format in the unix/epoch format as the value for {unixTimestamp}. Use a Epoch convertor, to convert the time and date to this format.")
@QueryParam("to") long to,
@ApiParam(
name = "type",
value = "Type of the Alert to be need to retrieve events.")
value = "The alert type to retrieve the events." +
"Provide APPLICATION_STATE or RUNTIME_STATE as the value.")
@Size(min = 2, max = 45)
@QueryParam("type") String type,
@ApiParam(
name = "If-Modified-Since",
value = "Validates if the requested variant has not been modified since the time specified",
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
required = false)
@HeaderParam("If-Modified-Since") String ifModifiedSince);

@ -1072,7 +1072,7 @@ public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminSe
private static void validateScheduleDate(String dateString){
try {
if (dateString != null) {
if (dateString != null && !dateString.isEmpty()) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setLenient(false);
sdf.parse(dateString);

@ -24,7 +24,7 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.analytics.dataservice.commons.AnalyticsDataResponse;
import org.wso2.carbon.analytics.dataservice.commons.SearchResultEntry;
import org.wso2.carbon.analytics.dataservice.core.AnalyticsDataServiceUtils;
import org.wso2.carbon.analytics.api.AnalyticsDataAPIUtil;
import org.wso2.carbon.analytics.datasource.commons.Record;
import org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException;
import org.wso2.carbon.context.CarbonContext;
@ -218,7 +218,7 @@ public class AndroidAPIUtils {
List<SearchResultEntry> resultEntries = analyticsDataAPI.search(tenantId, tableName, query, 0, eventCount);
List<String> recordIds = getRecordIds(resultEntries);
AnalyticsDataResponse response = analyticsDataAPI.get(tenantId, tableName, 1, null, recordIds);
Map<String, DeviceState> deviceStateses = createDeviceStatusData(AnalyticsDataServiceUtils.listRecords(
Map<String, DeviceState> deviceStateses = createDeviceStatusData(AnalyticsDataAPIUtil.listRecords(
analyticsDataAPI, response));
return getSortedDeviceStateData(deviceStateses, resultEntries);
}

@ -51,7 +51,7 @@
<property name="version" value="1.0"/>
<property name="host" value="localhost:9443"/>
<property name="schemes" value="https" />
<property name="basePath" value="/api-device-mgt-android-v1.0"/>
<property name="basePath" value="/api/device-mgt/android/v1.0"/>
<property name="title" value="Android Device Management API Definitions"/>
<property name="contact" value="dev@wso2.org"/>
<property name="license" value="Apache 2.0"/>

@ -23,13 +23,13 @@
<parent>
<artifactId>android-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>org.wso2.carbon.device.mgt.mobile.android.ui</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<name>WSO2 Carbon - Mobile Android UI</name>
<packaging>pom</packaging>

@ -55,9 +55,9 @@
<div class="panel-body">
<div id="policy-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Policies . . .
<br>
<br>
@ -85,9 +85,9 @@
<div id="policy-spinner"
class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Policy Compliance . . .
<br>
<br>
@ -123,9 +123,9 @@
<div class="panel-body">
<div id="apps-spinner" class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading App List . . .
<br>
<br>
@ -147,9 +147,9 @@
<div id="operations-spinner"
class="wr-advance-operations-init hidden">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;
Loading Operations Log . . .
<br>
<br>

@ -14,8 +14,8 @@
<div class="wr-advance-operations">
<div class="wr-advance-operations-init">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;Loading platform features . . .
<i class="fw fw-settings fw-spin fw-2x"></i>
Loading platform features . . .
<br><br>
</div>
</div>

@ -21,13 +21,13 @@
<h3 class="uppercase">What You Need</h3>
<hr>
<ul class="list-unstyled">
<li class="padding-top-double"><span class="circle">STEP 01</span>&nbsp;&nbsp;&nbsp;Android
<li class="padding-top-double"><span class="circle">STEP 01</span> Android
Mobile.
</li>
<li class="padding-top-double"><span class="circle">STEP 02</span>&nbsp;&nbsp;&nbsp;Go ahead
<li class="padding-top-double"><span class="circle">STEP 02</span> Go ahead
and click [Enroll Device].
</li>
<li class="padding-top-double"><span class="circle">STEP 03</span>&nbsp;&nbsp;&nbsp;Proceed
<li class="padding-top-double"><span class="circle">STEP 03</span> Proceed
to the [Prepare] section.
</li>
</ul>

@ -22,7 +22,7 @@
<parent>
<artifactId>android-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>mobile-plugins</artifactId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -23,7 +23,7 @@
<parent>
<artifactId>mobile-base-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>2.2.5-SNAPSHOT</version>
<version>2.2.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -44,7 +44,7 @@
<i class="fw fw-ring fw-stroke fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
&nbsp;&nbsp;Add New Device
Add New Device
</a>
</li>
{{/if}}
@ -55,7 +55,7 @@
<i class="fw fw-ring fw-stroke fw-stack-2x"></i>
<i class="fw fw-search fw-stack-1x"></i>
</span>
&nbsp;&nbsp;Advanced Search
Advanced Search
</a>
</li>
{{/if}}
@ -75,7 +75,7 @@
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
&nbsp;&nbsp;Add New Device
Add New Device
</a>
</h3>
</div>

@ -17,6 +17,7 @@
}}
{{unit "cdmf.unit.ui.title" pageTitle="Policy Management"}}
{{unit "cdmf.unit.data-tables-extended"}}
{{unit "cdmf.unit.ui.modal"}}
{{#zone "topCss"}}
<style>
@ -50,7 +51,7 @@
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;Add New Policy
Add New Policy
</a>
</li>
{{/equal}}
@ -64,7 +65,7 @@
<i class="fw fw-throttling-policy fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;Policy Priority
Policy Priority
</a>
</li>
{{/equal}}
@ -75,7 +76,7 @@
<i class="fw fw-check fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;Apply Changes To Devices
Apply Changes To Devices
</a>
</li>
{{/zone}}
@ -99,7 +100,7 @@
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
&nbsp;&nbsp;Add New Policy
Add New Policy
</a>
</h3>
{{/if}}
@ -268,393 +269,6 @@
<a href="#">By Status</a>
</div>
</div>
<div id="remove-policy-modal-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Do you really want to remove the selected policy(s)?
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="remove-policy-yes-link" class="btn-operations">Remove</a>
<a href="#" id="remove-policy-cancel-link" class="btn-operations btn-default">Cancel</a>
</div>
</div>
</div>
<div id="remove-policy-success-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Done. Selected policy was successfully removed.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="remove-policy-success-link" class="btn-operations">Ok</a>
</div>
</div>
</div>
<div id="remove-policy-error-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
An unexpected error occurred. Please try again later
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="remove-policy-error-link" class="btn-operations">Ok</a>
</div>
</div>
</div>
<div id="remove-active-policy-error-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Please Try again.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
<h4>You cannot remove policies that have been already applied to devices.
Please deselect active policies from your selection and try again.</h4>
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="remove-active-policy-error-link" class="btn-operations">Ok</a>
</div>
</div>
</div>
<div id="publish-policy-modal-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Do you really want to publish the selected policy(s)?
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="publish-policy-yes-link" class="btn-operations">Yes</a>
<a href="#" id="publish-policy-cancel-link" class="btn-operations btn-default">No</a>
</div>
</div>
</div>
<div id="publish-policy-success-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Done. Selected policy was successfully published.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="publish-policy-success-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="publish-policy-error-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
An unexpected error occurred. Please try again later.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="publish-policy-error-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="unpublish-policy-modal-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Do you really want to unpublish the selected policy(s)?
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="unpublish-policy-yes-link" class="btn-operations">
Yes
</a>
<a href="#" id="unpublish-policy-cancel-link" class="btn-operations btn-default">
No
</a>
</div>
</div>
</div>
<div id="unpublish-policy-success-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Done. Selected policy was successfully unpublished.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="unpublish-policy-success-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="unpublish-policy-error-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
An unexpected error occurred. Please try again later.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="unpublish-policy-error-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="save-policy-priorities-success-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Done. New Policy priorities were successfully updated.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="save-policy-priorities-success-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="save-policy-priorities-error-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
An unexpected error occurred. Please try again later.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="save-policy-priorities-error-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="change-policy-modal-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Do you really want to apply changes to all policies?
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="change-policy-yes-link" class="btn-operations">
Yes
</a>
<a href="#" id="change-policy-cancel-link" class="btn-operations btn-default">
No
</a>
</div>
</div>
</div>
<div id="change-policy-success-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
Done. Changes applied successfully.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="change-policy-success-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="change-policy-error-content" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
An unexpected error occurred. Please try again later.
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
</div>
<div class="modal-footer">
<div class="buttons">
<a href="#" id="change-policy-error-link" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="errorPolicyUnPublish" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-error fw-stack-1x"></i>
</span>
Action cannot be performed !
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
<h4>Please select a policy or a list of policies to un-publish.</h4>
</div>
<div class="modal-footer">
<div class="buttons">
<a href="javascript:hidePopup()" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="errorPolicyUnPublishSelection" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-error fw-stack-1x"></i>
</span>
Action cannot be performed !
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
<h4>You cannot select already inactive policies to be unpublished.
Please deselect inactive policies and try again.</h4>
</div>
<div class="modal-footer">
<div class="buttons">
<a href="javascript:hidePopup()" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="active-policy-selection-error" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-error fw-stack-1x"></i>
</span>
Action cannot be performed !
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
<h4>You cannot select already active policies. Please deselect active policies and try again.</h4>
</div>
<div class="modal-footer">
<div class="buttons">
<a href="javascript:hidePopup()" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="policy-publish-error" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-error fw-stack-1x"></i>
</span>
Action cannot be performed !
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
<h4>Please select a policy or a list of policies to publish.</h4>
</div>
<div class="modal-footer">
<div class="buttons">
<a href="javascript:hidePopup()" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
<div id="policy-remove-error" class="hide">
<div class="modal-header">
<h3 class="pull-left modal-title">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-error fw-stack-1x"></i>
</span>
Action cannot be performed !
</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
<h4>Please select a policy or a list of policies to remove.</h4>
</div>
<div class="modal-footer">
<div class="buttons">
<a href="javascript:hidePopup()" class="btn-operations">
Ok
</a>
</div>
</div>
</div>
{{/zone}}
{{#zone "bottomJs"}}

@ -163,8 +163,10 @@ $(document).ready(function () {
// click-event function for applyChangesButton
$(applyChangesButtonId).click(function () {
var serviceURL = "/api/device-mgt/v1.0/policies/apply-changes";
$(modalPopupContent).html($('#change-policy-modal-content').html());
showPopup();
modalDialog.header('Do you really want to apply changes to all policies?');
modalDialog.footer('<div class="buttons"><a href="#" id="change-policy-yes-link" class="btn-operations">Yes' +
'</a><a href="#" id="change-policy-cancel-link" class="btn-operations btn-default">No</a></div>');
modalDialog.show();
$("a#change-policy-yes-link").click(function () {
invokerUtil.put(
@ -173,10 +175,11 @@ $(document).ready(function () {
// on success
function (data, textStatus, jqXHR) {
if (jqXHR.status == 200) {
$(modalPopupContent).html($('#change-policy-success-content').html());
showPopup();
modalDialog.header('Done. Changes applied successfully.');
modalDialog.footer('<div class="buttons"><a href="#" id="change-policy-success-link" ' +
'class="btn-operations">Ok</a></div>');
$("a#change-policy-success-link").click(function () {
hidePopup();
modalDialog.hide();
location.reload();
});
}
@ -184,17 +187,19 @@ $(document).ready(function () {
// on error
function (jqXHR) {
console.log(stringify(jqXHR.data));
$(modalPopupContent).html($("#change-policy-error-content").html());
showPopup();
modalDialog.header('An unexpected error occurred. Please try again later.');
modalDialog.footer('<div class="buttons"><a href="#" id="change-policy-error-link" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsError();
$("a#change-policy-error-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
);
});
$("a#change-policy-cancel-link").click(function () {
hidePopup();
modalDialog.hide();
});
});
@ -207,16 +212,27 @@ $(document).ready(function () {
// if policies found in Inactive or Inactive/Updated states with in the selection,
// pop-up an error saying
// "You cannot select already inactive policies. Please deselect inactive policies and try again."
$(modalPopupContent).html($("#errorPolicyUnPublishSelection").html());
showPopup();
modalDialog.header('Action cannot be performed !');
modalDialog.content('You cannot select already inactive policies to be unpublished. Please deselect ' +
'inactive policies and try again.');
modalDialog.footer('<div class="buttons"><a href="javascript:modalDialog.hide()" class="btn-operations">Ok</a>' +
'</div>');
modalDialog.showAsAWarning();
} else {
var serviceURL = "/api/device-mgt/v1.0/policies/deactivate-policy";
if (policyList.length == 0) {
$(modalPopupContent).html($("#errorPolicyUnPublish").html());
modalDialog.header('Action cannot be performed !');
modalDialog.content('Please select a policy or a list of policies to un-publish.');
modalDialog.footer('<div class="buttons"><a href="javascript:modalDialog.hide()" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsAWarning();
} else {
$(modalPopupContent).html($("#unpublish-policy-modal-content").html());
modalDialog.header('Do you really want to unpublish the selected policy(s)?');
modalDialog.footer('<div class="buttons"><a href="#" id="unpublish-policy-yes-link" ' +
'class="btn-operations">Yes</a><a href="#" id="unpublish-policy-cancel-link" ' +
'class="btn-operations btn-default">No</a></div>');
modalDialog.show();
}
showPopup();
// on-click function for policy un-publishing "yes" button
$("a#unpublish-policy-yes-link").click(function () {
@ -226,9 +242,11 @@ $(document).ready(function () {
// on success
function (data, textStatus, jqXHR) {
if (jqXHR.status == 200 && data) {
$(modalPopupContent).html($("#unpublish-policy-success-content").html());
modalDialog.header('Done. Selected policy was successfully unpublished.');
modalDialog.footer('<div class="buttons"><a href="#" id="unpublish-policy-success-link" ' +
'class="btn-operations">Ok</a></div>');
$("a#unpublish-policy-success-link").click(function () {
hidePopup();
modalDialog.hide();
location.reload();
});
}
@ -236,9 +254,12 @@ $(document).ready(function () {
// on error
function (jqXHR) {
console.log(stringify(jqXHR.data));
$(modalPopupContent).html($("#unpublish-policy-error-content").html());
modalDialog.header('An unexpected error occurred. Please try again later.');
modalDialog.footer('<div class="buttons"><a href="#" id="unpublish-policy-error-link" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsError();
$("a#unpublish-policy-error-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
);
@ -246,7 +267,7 @@ $(document).ready(function () {
// on-click function for policy un-publishing "cancel" button
$("a#unpublish-policy-cancel-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
});
@ -260,17 +281,27 @@ $(document).ready(function () {
// if policies found in Active or Active/Updated states with in the selection,
// pop-up an error saying
// "You cannot select already active policies. Please deselect active policies and try again."
$(modalPopupContent).html($("#active-policy-selection-error").html());
showPopup();
modalDialog.header('Action cannot be performed !');
modalDialog.content('You cannot select already active policies. Please deselect active policies and try ' +
'again.');
modalDialog.footer('<div class="buttons"><a href="javascript:modalDialog.hide()" class="btn-operations">' +
'Ok</a></div>');
modalDialog.showAsAWarning();
} else {
var serviceURL = "/api/device-mgt/v1.0/policies/activate-policy";
if (policyList.length == 0) {
$(modalPopupContent).html($("#policy-publish-error").html());
modalDialog.header('Action cannot be performed !');
modalDialog.content('Please select a policy or a list of policies to publish.');
modalDialog.footer('<div class="buttons"><a href="javascript:modalDialog.hide()" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsAWarning();
} else {
$(modalPopupContent).html($("#publish-policy-modal-content").html());
modalDialog.header('Do you really want to publish the selected policy(s)?');
modalDialog.footer('<div class="buttons"><a href="#" id="publish-policy-yes-link" ' +
'class="btn-operations">Yes</a><a href="#" id="publish-policy-cancel-link" ' +
'class="btn-operations btn-default">No</a></div>');
modalDialog.show();
}
showPopup();
// on-click function for policy removing "yes" button
$("a#publish-policy-yes-link").click(function () {
invokerUtil.post(
@ -279,9 +310,11 @@ $(document).ready(function () {
// on success
function (data, textStatus, jqXHR) {
if (jqXHR.status == 200 && data) {
$(modalPopupContent).html($("#publish-policy-success-content").html());
modalDialog.header('Done. Selected policy was successfully published.');
modalDialog.footer('<div class="buttons"><a href="#" id="publish-policy-success-link" ' +
'class="btn-operations">Ok</a></div>');
$("a#publish-policy-success-link").click(function () {
hidePopup();
modalDialog.hide();
location.reload();
});
}
@ -289,9 +322,12 @@ $(document).ready(function () {
// on error
function (jqXHR) {
console.log(stringify(jqXHR.data));
$(modalPopupContent).html($("#publish-policy-error-content").html());
modalDialog.header('An unexpected error occurred. Please try again later.');
modalDialog.footer('<div class="buttons"><a href="#" id="publish-policy-error-link" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsError();
$("a#publish-policy-error-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
);
@ -299,7 +335,7 @@ $(document).ready(function () {
// on-click function for policy removing "cancel" button
$("a#publish-policy-cancel-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
});
@ -313,16 +349,27 @@ $(document).ready(function () {
// if policies found in Active or Active/Updated states with in the selection,
// pop-up an error saying
// "You cannot remove already active policies. Please deselect active policies and try again."
$(modalPopupContent).html($("#active-policy-selection-error").html());
showPopup();
modalDialog.header('Action cannot be performed !');
modalDialog.content('You cannot select already active policies. Please deselect active policies and try ' +
'again.');
modalDialog.footer('<div class="buttons"><a href="javascript:modalDialog.hide()" class="btn-operations">' +
'Ok</a></div>');
modalDialog.showAsAWarning();
} else {
var serviceURL = "/api/device-mgt/v1.0/policies/remove-policy";
if (policyList.length == 0) {
$(modalPopupContent).html($("#policy-remove-error").html());
modalDialog.header('Action cannot be performed !');
modalDialog.content('Please select a policy or a list of policies to remove.');
modalDialog.footer('<div class="buttons"><a href="javascript:modalDialog.hide()" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsAWarning();
} else {
$(modalPopupContent).html($("#remove-policy-modal-content").html());
modalDialog.header('Do you really want to remove the selected policy(s)?');
modalDialog.footer('<div class="buttons"><a href="#" id="remove-policy-yes-link" class=' +
'"btn-operations">Remove</a> <a href="#" id="remove-policy-cancel-link" ' +
'class="btn-operations btn-default">Cancel</a></div>');
modalDialog.show();
}
showPopup();
// on-click function for policy removing "yes" button
$("a#remove-policy-yes-link").click(function () {
@ -332,9 +379,11 @@ $(document).ready(function () {
// on success
function (data, textStatus, jqXHR) {
if (jqXHR.status == 200 && data) {
$(modalPopupContent).html($("#remove-policy-success-content").html());
modalDialog.header('Done. Selected policy was successfully removed.');
modalDialog.footer('<div class="buttons"><a href="#" id="remove-policy-success-link" ' +
'class="btn-operations">Ok</a></div>');
$("a#remove-policy-success-link").click(function () {
hidePopup();
modalDialog.hide();
location.reload();
});
}
@ -342,9 +391,12 @@ $(document).ready(function () {
// on error
function (jqXHR) {
console.log(stringify(jqXHR.data));
$(modalPopupContent).html($("#remove-policy-error-content").html());
modalDialog.header('An unexpected error occurred. Please try again later.');
modalDialog.footer('<div class="buttons"><a href="#" id="remove-policy-error-link" ' +
'class="btn-operations">Ok</a></div>');
modalDialog.showAsError();
$("a#remove-policy-error-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
);
@ -352,7 +404,7 @@ $(document).ready(function () {
// on-click function for policy removing "cancel" button
$("a#remove-policy-cancel-link").click(function () {
hidePopup();
modalDialog.hide();
});
}
});

@ -149,7 +149,7 @@
<input id="hard-lock" type="checkbox" class="form-control operationDataKeys"
data-key="hard-lock"/>
<span class="helper" title="Once it enables, device will be blocked permanently.">
&nbsp;&nbsp;&nbsp;Enable Permanent Lock
Enable Permanent Lock
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -172,7 +172,7 @@
data-key="instant-upgrade"/>
<span class="helper"
title="Once enabled, device firmware upgrade process will start instantly.">
&nbsp;&nbsp;&nbsp;Instant Upgrade
Instant Upgrade
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -205,7 +205,7 @@
showDropdowns: true,
timePickerIncrement: 1,
locale: {
format: 'MM-DD-YYYY hh:mm a'
format: "YYYY-MM-DDTHH:mm:ssZZ"
}
});
});
@ -222,7 +222,7 @@
showDropdowns: true,
timePickerIncrement: 1,
locale: {
format: 'MM-DD-YYYY hh:mm a'
format: "YYYY-MM-DDTHH:mm:ssZZ"
}
});
}

@ -48,39 +48,39 @@ var operationModule = function () {
"LOCK_OPERATION_CODE": "DEVICE_LOCK",
"UPGRADE_FIRMWARE": "UPGRADE_FIRMWARE",
"DISALLOW_ADJUST_VOLUME": "DISALLOW_ADJUST_VOLUME",
"DISALLOW_CONFIG_BLUETOOTH" : "DISALLOW_CONFIG_BLUETOOTH",
"DISALLOW_CONFIG_CELL_BROADCASTS" : "DISALLOW_CONFIG_CELL_BROADCASTS",
"DISALLOW_CONFIG_CREDENTIALS" : "DISALLOW_CONFIG_CREDENTIALS",
"DISALLOW_CONFIG_MOBILE_NETWORKS" : "DISALLOW_CONFIG_MOBILE_NETWORKS",
"DISALLOW_CONFIG_TETHERING" : "DISALLOW_CONFIG_TETHERING",
"DISALLOW_CONFIG_VPN" : "DISALLOW_CONFIG_VPN",
"DISALLOW_CONFIG_WIFI" : "DISALLOW_CONFIG_WIFI",
"DISALLOW_APPS_CONTROL" : "DISALLOW_APPS_CONTROL",
"DISALLOW_CREATE_WINDOWS" : "DISALLOW_CREATE_WINDOWS",
"DISALLOW_CROSS_PROFILE_COPY_PASTE" : "DISALLOW_CROSS_PROFILE_COPY_PASTE",
"DISALLOW_DEBUGGING_FEATURES" : "DISALLOW_DEBUGGING_FEATURES",
"DISALLOW_FACTORY_RESET" : "DISALLOW_FACTORY_RESET",
"DISALLOW_ADD_USER" : "DISALLOW_ADD_USER",
"DISALLOW_INSTALL_APPS" : "DISALLOW_INSTALL_APPS",
"DISALLOW_INSTALL_UNKNOWN_SOURCES" : "DISALLOW_INSTALL_UNKNOWN_SOURCES",
"DISALLOW_MODIFY_ACCOUNTS" : "DISALLOW_MODIFY_ACCOUNTS",
"DISALLOW_MOUNT_PHYSICAL_MEDIA" : "DISALLOW_MOUNT_PHYSICAL_MEDIA",
"DISALLOW_NETWORK_RESET" : "DISALLOW_NETWORK_RESET",
"DISALLOW_OUTGOING_BEAM" : "DISALLOW_OUTGOING_BEAM",
"DISALLOW_OUTGOING_CALLS" : "DISALLOW_OUTGOING_CALLS",
"DISALLOW_REMOVE_USER" : "DISALLOW_REMOVE_USER",
"DISALLOW_SAFE_BOOT" : "DISALLOW_SAFE_BOOT",
"DISALLOW_SHARE_LOCATION" : "DISALLOW_SHARE_LOCATION",
"DISALLOW_SMS" : "DISALLOW_SMS",
"DISALLOW_UNINSTALL_APPS" : "DISALLOW_UNINSTALL_APPS",
"DISALLOW_UNMUTE_MICROPHONE" : "DISALLOW_UNMUTE_MICROPHONE",
"DISALLOW_USB_FILE_TRANSFER" : "DISALLOW_USB_FILE_TRANSFER",
"ALLOW_PARENT_PROFILE_APP_LINKING" : "ALLOW_PARENT_PROFILE_APP_LINKING",
"ENSURE_VERIFY_APPS" : "ENSURE_VERIFY_APPS",
"AUTO_TIME" : "AUTO_TIME",
"SET_SCREEN_CAPTURE_DISABLED" : "SET_SCREEN_CAPTURE_DISABLED",
"SET_STATUS_BAR_DISABLED" : "SET_STATUS_BAR_DISABLED",
"APPLICATION_OPERATION_CODE":"APP-RESTRICTION",
"DISALLOW_CONFIG_BLUETOOTH": "DISALLOW_CONFIG_BLUETOOTH",
"DISALLOW_CONFIG_CELL_BROADCASTS": "DISALLOW_CONFIG_CELL_BROADCASTS",
"DISALLOW_CONFIG_CREDENTIALS": "DISALLOW_CONFIG_CREDENTIALS",
"DISALLOW_CONFIG_MOBILE_NETWORKS": "DISALLOW_CONFIG_MOBILE_NETWORKS",
"DISALLOW_CONFIG_TETHERING": "DISALLOW_CONFIG_TETHERING",
"DISALLOW_CONFIG_VPN": "DISALLOW_CONFIG_VPN",
"DISALLOW_CONFIG_WIFI": "DISALLOW_CONFIG_WIFI",
"DISALLOW_APPS_CONTROL": "DISALLOW_APPS_CONTROL",
"DISALLOW_CREATE_WINDOWS": "DISALLOW_CREATE_WINDOWS",
"DISALLOW_CROSS_PROFILE_COPY_PASTE": "DISALLOW_CROSS_PROFILE_COPY_PASTE",
"DISALLOW_DEBUGGING_FEATURES": "DISALLOW_DEBUGGING_FEATURES",
"DISALLOW_FACTORY_RESET": "DISALLOW_FACTORY_RESET",
"DISALLOW_ADD_USER": "DISALLOW_ADD_USER",
"DISALLOW_INSTALL_APPS": "DISALLOW_INSTALL_APPS",
"DISALLOW_INSTALL_UNKNOWN_SOURCES": "DISALLOW_INSTALL_UNKNOWN_SOURCES",
"DISALLOW_MODIFY_ACCOUNTS": "DISALLOW_MODIFY_ACCOUNTS",
"DISALLOW_MOUNT_PHYSICAL_MEDIA": "DISALLOW_MOUNT_PHYSICAL_MEDIA",
"DISALLOW_NETWORK_RESET": "DISALLOW_NETWORK_RESET",
"DISALLOW_OUTGOING_BEAM": "DISALLOW_OUTGOING_BEAM",
"DISALLOW_OUTGOING_CALLS": "DISALLOW_OUTGOING_CALLS",
"DISALLOW_REMOVE_USER": "DISALLOW_REMOVE_USER",
"DISALLOW_SAFE_BOOT": "DISALLOW_SAFE_BOOT",
"DISALLOW_SHARE_LOCATION": "DISALLOW_SHARE_LOCATION",
"DISALLOW_SMS": "DISALLOW_SMS",
"DISALLOW_UNINSTALL_APPS": "DISALLOW_UNINSTALL_APPS",
"DISALLOW_UNMUTE_MICROPHONE": "DISALLOW_UNMUTE_MICROPHONE",
"DISALLOW_USB_FILE_TRANSFER": "DISALLOW_USB_FILE_TRANSFER",
"ALLOW_PARENT_PROFILE_APP_LINKING": "ALLOW_PARENT_PROFILE_APP_LINKING",
"ENSURE_VERIFY_APPS": "ENSURE_VERIFY_APPS",
"AUTO_TIME": "AUTO_TIME",
"SET_SCREEN_CAPTURE_DISABLED": "SET_SCREEN_CAPTURE_DISABLED",
"SET_STATUS_BAR_DISABLED": "SET_STATUS_BAR_DISABLED",
"APPLICATION_OPERATION_CODE": "APP-RESTRICTION",
"SYSTEM_UPDATE_POLICY_CODE": "SYSTEM_UPDATE_POLICY",
"KIOSK_APPS_CODE": "KIOSK_APPS"
};
@ -335,31 +335,31 @@ var operationModule = function () {
break;
case iosOperationConstants["EMAIL_OPERATION_CODE"]:
payload = {
"emailAccountDescription": operationPayload["emailAccountDescription"],
"emailAccountName": operationPayload["emailAccountName"],
"emailAccountType": operationPayload["emailAccountType"],
"emailAddress": operationPayload["emailAddress"],
"emailIncomingMailServerAuthentication": operationPayload["incomingMailServerAuthentication"],
"emailIncomingMailServerHostname": operationPayload["incomingMailServerHostName"],
"emailIncomingMailServerPort": operationPayload["incomingMailServerPortNumber"],
"emailIncomingUseSSL": operationPayload["incomingMailServerUseSSL"],
"emailIncomingMailServerUsername": operationPayload["incomingMailServerUsername"],
"emailIncomingMailServerPassword": operationPayload["incomingPassword"],
"emailOutgoingMailServerPassword": operationPayload["outgoingPassword"],
"emailOutgoingPasswordSameAsIncomingPassword": operationPayload["outgoingPasswordSameAsIncomingPassword"],
"emailOutgoingMailServerAuthentication": operationPayload["outgoingMailServerAuthentication"],
"emailOutgoingMailServerHostname": operationPayload["outgoingMailServerHostName"],
"emailOutgoingMailServerPort": operationPayload["outgoingMailServerPortNumber"],
"emailOutgoingUseSSL": operationPayload["outgoingMailServerUseSSL"],
"emailOutgoingMailServerUsername": operationPayload["outgoingMailServerUsername"],
"emailPreventMove": operationPayload["preventMove"],
"emailPreventAppSheet": operationPayload["preventAppSheet"],
"emailDisableMailRecentsSyncing": operationPayload["disableMailRecentsSyncing"],
"emailIncomingMailServerIMAPPathPrefix": operationPayload["incomingMailServerIMAPPathPrefix"],
"emailSMIMEEnabled": operationPayload["smimeenabled"],
"emailSMIMESigningCertificateUUID": operationPayload["smimesigningCertificateUUID"],
"emailSMIMEEncryptionCertificateUUID": operationPayload["smimeencryptionCertificateUUID"],
"emailSMIMEEnablePerMessageSwitch": operationPayload["smimeenablePerMessageSwitch"]
"emailAccountDescription": operationPayload["emailAccountDescription"],
"emailAccountName": operationPayload["emailAccountName"],
"emailAccountType": operationPayload["emailAccountType"],
"emailAddress": operationPayload["emailAddress"],
"emailIncomingMailServerAuthentication": operationPayload["incomingMailServerAuthentication"],
"emailIncomingMailServerHostname": operationPayload["incomingMailServerHostName"],
"emailIncomingMailServerPort": operationPayload["incomingMailServerPortNumber"],
"emailIncomingUseSSL": operationPayload["incomingMailServerUseSSL"],
"emailIncomingMailServerUsername": operationPayload["incomingMailServerUsername"],
"emailIncomingMailServerPassword": operationPayload["incomingPassword"],
"emailOutgoingMailServerPassword": operationPayload["outgoingPassword"],
"emailOutgoingPasswordSameAsIncomingPassword": operationPayload["outgoingPasswordSameAsIncomingPassword"],
"emailOutgoingMailServerAuthentication": operationPayload["outgoingMailServerAuthentication"],
"emailOutgoingMailServerHostname": operationPayload["outgoingMailServerHostName"],
"emailOutgoingMailServerPort": operationPayload["outgoingMailServerPortNumber"],
"emailOutgoingUseSSL": operationPayload["outgoingMailServerUseSSL"],
"emailOutgoingMailServerUsername": operationPayload["outgoingMailServerUsername"],
"emailPreventMove": operationPayload["preventMove"],
"emailPreventAppSheet": operationPayload["preventAppSheet"],
"emailDisableMailRecentsSyncing": operationPayload["disableMailRecentsSyncing"],
"emailIncomingMailServerIMAPPathPrefix": operationPayload["incomingMailServerIMAPPathPrefix"],
"emailSMIMEEnabled": operationPayload["smimeenabled"],
"emailSMIMESigningCertificateUUID": operationPayload["smimesigningCertificateUUID"],
"emailSMIMEEncryptionCertificateUUID": operationPayload["smimeencryptionCertificateUUID"],
"emailSMIMEEnablePerMessageSwitch": operationPayload["smimeenablePerMessageSwitch"]
};
break;
case iosOperationConstants["AIRPLAY_OPERATION_CODE"]:
@ -439,7 +439,7 @@ var operationModule = function () {
break;
case iosOperationConstants["WIFI_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
if(operationData["wifiProxyPort"] == ""){
if (operationData["wifiProxyPort"] == "") {
operationData["wifiProxyPort"] = -1;
}
payload = {
@ -511,35 +511,35 @@ var operationModule = function () {
};
} else if (operationData["vpnType"] == "IPSec") {
ipSec = {
"remoteAddress" : operationData["ipsecRemoteAddress"],
"authenticationMethod" : operationData["ipsecAuthenticationMethod"],
"localIdentifier" : operationData["ipsecLocalIdentifier"],
"sharedSecret" : operationData["ipsecSharedSecret"],
"payloadCertificateUUID" : operationData["ipsecPayloadCertificateUUID"],
"XAuthEnabled" : operationData["ipsecXAuthEnabled"],
"XAuthName" : operationData["ipsecXAuthName"],
"promptForVPNPIN" : operationData["ipsecPromptForVPNPIN"]
"remoteAddress": operationData["ipsecRemoteAddress"],
"authenticationMethod": operationData["ipsecAuthenticationMethod"],
"localIdentifier": operationData["ipsecLocalIdentifier"],
"sharedSecret": operationData["ipsecSharedSecret"],
"payloadCertificateUUID": operationData["ipsecPayloadCertificateUUID"],
"XAuthEnabled": operationData["ipsecXAuthEnabled"],
"XAuthName": operationData["ipsecXAuthName"],
"promptForVPNPIN": operationData["ipsecPromptForVPNPIN"]
};
} else if (operationData["vpnType"] == "IKEv2") {
ikev2 = {
"remoteAddress" : operationData["ikev2RemoteAddress"],
"localIdentifier" : operationData["ikev2LocalIdentifier"],
"remoteIdentifier" : operationData["ikev2RemoteIdentifier"],
"authenticationMethod" : operationData["ikev2AuthenticationMethod"],
"sharedSecret" : operationData["ikev2SharedSecret"],
"payloadCertificateUUID" : operationData["ikev2PayloadCertificateUUID"],
"extendedAuthEnabled" : operationData["ikev2ExtendedAuthEnabled"],
"authName" : operationData["ikev2AuthName"],
"authPassword" : operationData["ikev2AuthPassword"],
"deadPeerDetectionInterval" : operationData["ikev2DeadPeerDetectionInterval"],
"serverCertificateIssuerCommonName" : operationData["ikev2ServerCertificateIssuerCommonName"],
"serverCertificateCommonName" : operationData["ikev2ServerCertificateCommonName"]
"remoteAddress": operationData["ikev2RemoteAddress"],
"localIdentifier": operationData["ikev2LocalIdentifier"],
"remoteIdentifier": operationData["ikev2RemoteIdentifier"],
"authenticationMethod": operationData["ikev2AuthenticationMethod"],
"sharedSecret": operationData["ikev2SharedSecret"],
"payloadCertificateUUID": operationData["ikev2PayloadCertificateUUID"],
"extendedAuthEnabled": operationData["ikev2ExtendedAuthEnabled"],
"authName": operationData["ikev2AuthName"],
"authPassword": operationData["ikev2AuthPassword"],
"deadPeerDetectionInterval": operationData["ikev2DeadPeerDetectionInterval"],
"serverCertificateIssuerCommonName": operationData["ikev2ServerCertificateIssuerCommonName"],
"serverCertificateCommonName": operationData["ikev2ServerCertificateCommonName"]
};
} else if (operationData["vpnType"] == "PulseSecure") {
pulseSecure = {
"remoteAddress" : operationData["pulsesecureRemoteAddress"],
"userName" : operationData["pulsesecureName"],
"sharedSecret" : operationData["pulsesecureSharedSecret"]
"remoteAddress": operationData["pulsesecureRemoteAddress"],
"userName": operationData["pulsesecureName"],
"sharedSecret": operationData["pulsesecureSharedSecret"]
};
}
@ -566,13 +566,13 @@ var operationModule = function () {
"onDemandMatchDomainsAlways": domainsAlways,
"onDemandMatchDomainsNever": domainsNever,
"onDemandMatchDomainsOnRetry": domainsRetry,
"onDemandRules" : operationData["onDemandRules"],
"vendorConfigs" : operationData["vendorConfigs"],
"vpnType" : operationData["vpnType"],
"onDemandRules": operationData["onDemandRules"],
"vendorConfigs": operationData["vendorConfigs"],
"vpnType": operationData["vpnType"],
"ppp": ppp,
"ipSec": ipSec,
"ikEv2": ikev2,
"pulseSecure" : pulseSecure
"pulseSecure": pulseSecure
}
};
break;
@ -762,11 +762,15 @@ var operationModule = function () {
case iosOperationConstants["DOMAIN_OPERATION_CODE"]:
operationType = operationTypeConstants["PROFILE"];
payload = {
"emailDomains": operationData["emailDomains"],
"webDomains": operationData["webDomains"]
"operation": {
"emailDomains": operationData["emailDomains"],
"webDomains": operationData["webDomains"]
}
};
break;
case iosOperationConstants["CELLULAR_OPERATION_CODE"]:
case
iosOperationConstants["CELLULAR_OPERATION_CODE"]
:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
@ -778,7 +782,9 @@ var operationModule = function () {
}
};
break;
case iosOperationConstants["NOTIFICATION_OPERATION_CODE"]:
case
iosOperationConstants["NOTIFICATION_OPERATION_CODE"]
:
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
@ -798,7 +804,8 @@ var operationModule = function () {
payload["deviceIDs"] = deviceList;
}
return payload;
};
}
;
/**
* Convert the android platform specific code to the generic payload.
@ -830,6 +837,15 @@ var operationModule = function () {
"encryptStorageEnabled": operationPayload["encrypted"]
};
break;
case androidOperationConstants["WORK_PROFILE_CODE"]:
payload = {
"workProfilePolicyProfileName": operationPayload["profileName"],
"workProfilePolicyEnableSystemApps": operationPayload["enableSystemApps"],
"workProfilePolicyHideSystemApps": operationPayload["hideSystemApps"],
"workProfilePolicyUnhideSystemApps": operationPayload["unhideSystemApps"],
"workProfilePolicyEnablePlaystoreApps": operationPayload["enablePlaystoreApps"]
};
break;
case androidOperationConstants["WIFI_OPERATION_CODE"]:
payload = {
"wifiSSID": operationPayload["ssid"],
@ -840,8 +856,8 @@ var operationModule = function () {
"wifiProvisioning": operationPayload["provisioning"],
"wifiIdentity": operationPayload["identity"],
"wifiAnoIdentity": operationPayload["anonymousIdentity"],
"wifiCaCert" : operationPayload["cacert"],
"wifiCaCertName" : operationPayload["cacertName"]
"wifiCaCert": operationPayload["cacert"],
"wifiCaCertName": operationPayload["cacertName"]
};
break;
case androidOperationConstants["VPN_OPERATION_CODE"]:
@ -888,40 +904,40 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"CAMERA" : operationData["cameraEnabled"],
"DISALLOW_ADJUST_VOLUME" : operationData["disallowAdjustVolumeEnabled"],
"DISALLOW_CONFIG_BLUETOOTH" : operationData["disallowConfigBluetooth"],
"DISALLOW_CONFIG_CELL_BROADCASTS" : operationData["disallowConfigCellBroadcasts"],
"DISALLOW_CONFIG_CREDENTIALS" : operationData["disallowConfigCredentials"],
"DISALLOW_CONFIG_MOBILE_NETWORKS" : operationData["disallowConfigMobileNetworks"],
"DISALLOW_CONFIG_TETHERING" : operationData["disallowConfigTethering"],
"DISALLOW_CONFIG_VPN" : operationData["disallowConfigVpn"],
"DISALLOW_CONFIG_WIFI" : operationData["disallowConfigWifi"],
"DISALLOW_APPS_CONTROL" : operationData["disallowAppControl"],
"DISALLOW_CREATE_WINDOWS" : operationData["disallowCreateWindows"],
"DISALLOW_CROSS_PROFILE_COPY_PASTE" : operationData["disallowCrossProfileCopyPaste"],
"DISALLOW_DEBUGGING_FEATURES" : operationData["disallowDebugging"],
"DISALLOW_FACTORY_RESET" : operationData["disallowFactoryReset"],
"DISALLOW_ADD_USER" : operationData["disallowAddUser"],
"DISALLOW_INSTALL_APPS" : operationData["disallowInstallApps"],
"DISALLOW_INSTALL_UNKNOWN_SOURCES" : operationData["disallowInstallUnknownSources"],
"DISALLOW_MODIFY_ACCOUNTS" : operationData["disallowModifyAccounts"],
"DISALLOW_MOUNT_PHYSICAL_MEDIA" : operationData["disallowMountPhysicalMedia"],
"DISALLOW_NETWORK_RESET" : operationData["disallowNetworkReset"],
"DISALLOW_OUTGOING_BEAM" : operationData["disallowOutgoingBeam"],
"DISALLOW_OUTGOING_CALLS" : operationData["disallowOutgoingCalls"],
"DISALLOW_REMOVE_USER" : operationData["disallowRemoveUser"],
"DISALLOW_SAFE_BOOT" : operationData["disallowSafeBoot"],
"DISALLOW_SHARE_LOCATION" : operationData["disallowLocationSharing"],
"DISALLOW_SMS" : operationData["disallowSMS"],
"DISALLOW_UNINSTALL_APPS" : operationData["disallowUninstallApps"],
"DISALLOW_UNMUTE_MICROPHONE" : operationData["disallowUnmuteMicrophone"],
"DISALLOW_USB_FILE_TRANSFER" : operationData["disallowUSBFileTransfer"],
"ALLOW_PARENT_PROFILE_APP_LINKING" : operationData["disallowParentProfileAppLinking"],
"ENSURE_VERIFY_APPS" : operationData["ensureVerifyApps"],
"AUTO_TIME" : operationData["enableAutoTime"],
"SET_SCREEN_CAPTURE_DISABLED" : operationData["disableScreenCapture"],
"SET_STATUS_BAR_DISABLED" : operationData["disableStatusBar"]
"CAMERA": operationData["cameraEnabled"],
"DISALLOW_ADJUST_VOLUME": operationData["disallowAdjustVolumeEnabled"],
"DISALLOW_CONFIG_BLUETOOTH": operationData["disallowConfigBluetooth"],
"DISALLOW_CONFIG_CELL_BROADCASTS": operationData["disallowConfigCellBroadcasts"],
"DISALLOW_CONFIG_CREDENTIALS": operationData["disallowConfigCredentials"],
"DISALLOW_CONFIG_MOBILE_NETWORKS": operationData["disallowConfigMobileNetworks"],
"DISALLOW_CONFIG_TETHERING": operationData["disallowConfigTethering"],
"DISALLOW_CONFIG_VPN": operationData["disallowConfigVpn"],
"DISALLOW_CONFIG_WIFI": operationData["disallowConfigWifi"],
"DISALLOW_APPS_CONTROL": operationData["disallowAppControl"],
"DISALLOW_CREATE_WINDOWS": operationData["disallowCreateWindows"],
"DISALLOW_CROSS_PROFILE_COPY_PASTE": operationData["disallowCrossProfileCopyPaste"],
"DISALLOW_DEBUGGING_FEATURES": operationData["disallowDebugging"],
"DISALLOW_FACTORY_RESET": operationData["disallowFactoryReset"],
"DISALLOW_ADD_USER": operationData["disallowAddUser"],
"DISALLOW_INSTALL_APPS": operationData["disallowInstallApps"],
"DISALLOW_INSTALL_UNKNOWN_SOURCES": operationData["disallowInstallUnknownSources"],
"DISALLOW_MODIFY_ACCOUNTS": operationData["disallowModifyAccounts"],
"DISALLOW_MOUNT_PHYSICAL_MEDIA": operationData["disallowMountPhysicalMedia"],
"DISALLOW_NETWORK_RESET": operationData["disallowNetworkReset"],
"DISALLOW_OUTGOING_BEAM": operationData["disallowOutgoingBeam"],
"DISALLOW_OUTGOING_CALLS": operationData["disallowOutgoingCalls"],
"DISALLOW_REMOVE_USER": operationData["disallowRemoveUser"],
"DISALLOW_SAFE_BOOT": operationData["disallowSafeBoot"],
"DISALLOW_SHARE_LOCATION": operationData["disallowLocationSharing"],
"DISALLOW_SMS": operationData["disallowSMS"],
"DISALLOW_UNINSTALL_APPS": operationData["disallowUninstallApps"],
"DISALLOW_UNMUTE_MICROPHONE": operationData["disallowUnmuteMicrophone"],
"DISALLOW_USB_FILE_TRANSFER": operationData["disallowUSBFileTransfer"],
"ALLOW_PARENT_PROFILE_APP_LINKING": operationData["disallowParentProfileAppLinking"],
"ENSURE_VERIFY_APPS": operationData["ensureVerifyApps"],
"AUTO_TIME": operationData["enableAutoTime"],
"SET_SCREEN_CAPTURE_DISABLED": operationData["disableScreenCapture"],
"SET_STATUS_BAR_DISABLED": operationData["disableStatusBar"]
}
};
break;
@ -929,7 +945,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"lockCode" : operationData["lockCode"]
"lockCode": operationData["lockCode"]
}
};
break;
@ -937,7 +953,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"encrypted" : operationData["encryptStorageEnabled"]
"encrypted": operationData["encryptStorageEnabled"]
}
};
break;
@ -955,8 +971,8 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"schedule" : operationData["schedule"],
"server" : operationData["server"]
"schedule": operationData["schedule"],
"server": operationData["server"]
}
};
break;
@ -964,7 +980,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"pin" : operationData["pin"]
"pin": operationData["pin"]
}
};
break;
@ -973,15 +989,15 @@ var operationModule = function () {
payload = {
"operation": {
"ssid": operationData["wifiSSID"],
"type": operationData["wifiType"],
"password" : operationData["wifiPassword"],
"eap" : operationData["wifiEAP"],
"phase2" : operationData["wifiPhase2"],
"provisioning" : operationData["wifiProvisioning"],
"identity" : operationData["wifiIdentity"],
"anonymousIdentity" : operationData["wifiAnoIdentity"],
"cacert" : operationData["wifiCaCert"],
"cacertName" : operationData["wifiCaCertName"]
"type": operationData["wifiType"],
"password": operationData["wifiPassword"],
"eap": operationData["wifiEAP"],
"phase2": operationData["wifiPhase2"],
"provisioning": operationData["wifiProvisioning"],
"identity": operationData["wifiIdentity"],
"anonymousIdentity": operationData["wifiAnoIdentity"],
"cacert": operationData["wifiCaCert"],
"cacertName": operationData["wifiCaCertName"]
}
};
break;
@ -1000,8 +1016,8 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"message" : operationData["lock-message"],
"isHardLockEnabled" : operationData["hard-lock"]
"message": operationData["lock-message"],
"isHardLockEnabled": operationData["hard-lock"]
}
};
break;
@ -1152,7 +1168,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"enabled" : operationData["cameraEnabled"]
"enabled": operationData["cameraEnabled"]
}
};
break;
@ -1160,7 +1176,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"lockCode" : operationData["lockCode"]
"lockCode": operationData["lockCode"]
}
};
break;
@ -1168,7 +1184,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"encrypted" : operationData["encryptStorageEnabled"]
"encrypted": operationData["encryptStorageEnabled"]
}
};
break;
@ -1176,7 +1192,7 @@ var operationModule = function () {
operationType = operationTypeConstants["PROFILE"];
payload = {
"operation": {
"message" : operationData["message"]
"message": operationData["message"]
}
};
break;
@ -1283,7 +1299,9 @@ var operationModule = function () {
*/
$.fn.filterByData = function (prop, val) {
return this.filter(
function () {return $(this).data(prop) == val;}
function () {
return $(this).data(prop) == val;
}
);
};
@ -1604,18 +1622,18 @@ var operationModule = function () {
var operationCode = operationCodes[i];
var payload = publicMethods.generatePayload(platformType, operationCode, null);
if(platformType == platformTypeConstants["ANDROID"] &&
operationCodes[i] == androidOperationConstants["CAMERA_OPERATION_CODE"]){
if (platformType == platformTypeConstants["ANDROID"] &&
operationCodes[i] == androidOperationConstants["CAMERA_OPERATION_CODE"]) {
var operations = payload["operation"];
for (var key in operations){
for (var key in operations) {
operationCode = key;
var restriction = false;
if(operations[key]){
if (operations[key]) {
restriction = true;
}
var payloadResult = {
"operation": {
"enabled" : restriction
"enabled": restriction
}
};
generatedProfile[operationCode] = payloadResult["operation"];
@ -1625,7 +1643,6 @@ var operationModule = function () {
generatedProfile[operationCode] = payload["operation"];
}
}
console.log(generatedProfile);
return generatedProfile;
};
@ -1643,108 +1660,108 @@ var operationModule = function () {
var configuredFeature = payload[i];
var featureCode = configuredFeature["featureCode"];
var operationPayload = configuredFeature["content"];
if(platformType == platformTypeConstants["ANDROID"]){
var restriction = JSON.parse(operationPayload);
if(featureCode == androidOperationConstants["CAMERA_OPERATION_CODE"]){
if (platformType == platformTypeConstants["ANDROID"]) {
var restriction = JSON.parse(operationPayload);
if (featureCode == androidOperationConstants["CAMERA_OPERATION_CODE"]) {
restrictions["cameraEnabled"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_ADJUST_VOLUME"]){
} else if (featureCode == androidOperationConstants["DISALLOW_ADJUST_VOLUME"]) {
restrictions["disallowAdjustVolumeEnabled"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_BLUETOOTH"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_BLUETOOTH"]) {
restrictions["disallowConfigBluetooth"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CELL_BROADCASTS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CELL_BROADCASTS"]) {
restrictions["disallowConfigCellBroadcasts"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CREDENTIALS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_CREDENTIALS"]) {
restrictions["disallowConfigCredentials"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_MOBILE_NETWORKS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_MOBILE_NETWORKS"]) {
restrictions["disallowConfigMobileNetworks"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_TETHERING"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_TETHERING"]) {
restrictions["disallowConfigTethering"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_VPN"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_VPN"]) {
restrictions["disallowConfigVpn"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_WIFI"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CONFIG_WIFI"]) {
restrictions["disallowConfigWifi"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_APPS_CONTROL"]){
} else if (featureCode == androidOperationConstants["DISALLOW_APPS_CONTROL"]) {
restrictions["disallowAppControl"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CREATE_WINDOWS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CREATE_WINDOWS"]) {
restrictions["disallowCreateWindows"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_CROSS_PROFILE_COPY_PASTE"]){
} else if (featureCode == androidOperationConstants["DISALLOW_CROSS_PROFILE_COPY_PASTE"]) {
restrictions["disallowCrossProfileCopyPaste"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_DEBUGGING_FEATURES"]){
} else if (featureCode == androidOperationConstants["DISALLOW_DEBUGGING_FEATURES"]) {
restrictions["disallowDebugging"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_FACTORY_RESET"]){
} else if (featureCode == androidOperationConstants["DISALLOW_FACTORY_RESET"]) {
restrictions["disallowFactoryReset"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_ADD_USER"]){
} else if (featureCode == androidOperationConstants["DISALLOW_ADD_USER"]) {
restrictions["disallowAddUser"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_APPS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_APPS"]) {
restrictions["disallowInstallApps"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_UNKNOWN_SOURCES"]){
} else if (featureCode == androidOperationConstants["DISALLOW_INSTALL_UNKNOWN_SOURCES"]) {
restrictions["disallowInstallUnknownSources"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_MODIFY_ACCOUNTS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_MODIFY_ACCOUNTS"]) {
restrictions["disallowModifyAccounts"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_MOUNT_PHYSICAL_MEDIA"]){
} else if (featureCode == androidOperationConstants["DISALLOW_MOUNT_PHYSICAL_MEDIA"]) {
restrictions["disallowMountPhysicalMedia"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_NETWORK_RESET"]){
} else if (featureCode == androidOperationConstants["DISALLOW_NETWORK_RESET"]) {
restrictions["disallowNetworkReset"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_BEAM"]){
} else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_BEAM"]) {
restrictions["disallowOutgoingBeam"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_CALLS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_OUTGOING_CALLS"]) {
restrictions["disallowOutgoingCalls"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_REMOVE_USER"]){
} else if (featureCode == androidOperationConstants["DISALLOW_REMOVE_USER"]) {
restrictions["disallowRemoveUser"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_SAFE_BOOT"]){
} else if (featureCode == androidOperationConstants["DISALLOW_SAFE_BOOT"]) {
restrictions["disallowSafeBoot"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_SHARE_LOCATION"]){
} else if (featureCode == androidOperationConstants["DISALLOW_SHARE_LOCATION"]) {
restrictions["disallowLocationSharing"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_SMS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_SMS"]) {
restrictions["disallowSMS"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_UNINSTALL_APPS"]){
} else if (featureCode == androidOperationConstants["DISALLOW_UNINSTALL_APPS"]) {
restrictions["disallowUninstallApps"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_UNMUTE_MICROPHONE"]){
} else if (featureCode == androidOperationConstants["DISALLOW_UNMUTE_MICROPHONE"]) {
restrictions["disallowUnmuteMicrophone"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["DISALLOW_USB_FILE_TRANSFER"]){
} else if (featureCode == androidOperationConstants["DISALLOW_USB_FILE_TRANSFER"]) {
restrictions["disallowUSBFileTransfer"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["ALLOW_PARENT_PROFILE_APP_LINKING"]){
} else if (featureCode == androidOperationConstants["ALLOW_PARENT_PROFILE_APP_LINKING"]) {
restrictions["disallowParentProfileAppLinking"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["ENSURE_VERIFY_APPS"]){
} else if (featureCode == androidOperationConstants["ENSURE_VERIFY_APPS"]) {
restrictions["ensureVerifyApps"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["AUTO_TIME"]){
} else if (featureCode == androidOperationConstants["AUTO_TIME"]) {
restrictions["enableAutoTime"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["SET_SCREEN_CAPTURE_DISABLED"]){
} else if (featureCode == androidOperationConstants["SET_SCREEN_CAPTURE_DISABLED"]) {
restrictions["disableScreenCapture"] = restriction["enabled"];
continue;
} else if (featureCode == androidOperationConstants["SET_STATUS_BAR_DISABLED"]){
} else if (featureCode == androidOperationConstants["SET_STATUS_BAR_DISABLED"]) {
restrictions["disableStatusBar"] = restriction["enabled"];
continue;
}

@ -27,7 +27,7 @@
<i class="fw fw-add fw-stack-1x fw-inverse"></i>
</span>
</span>
&nbsp;&nbsp;Add your new mobile device to {{@app.conf.appName}}
Add your new mobile device to {{@app.conf.appName}}
</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
</div>

@ -85,6 +85,7 @@ var InitiateViewOption = null;
}
function loadOperationsLog(update) {
var owner = $("#device-owner").data("owner");
var operationsLogTable = "#operations-log-table";
if (update) {
operationTable = $(operationsLogTable).DataTable();
@ -100,7 +101,7 @@ var InitiateViewOption = null;
order: [],
ajax: {
url: "/emm/api/operation/paginate",
data: {deviceId : deviceIdentifier, deviceType: deviceType},
data: {deviceId : deviceIdentifier, deviceType: deviceType ,owner:owner },
dataSrc: function (json) {
$("#operations-spinner").addClass("hidden");
$("#operations-log-container").empty();

@ -39,10 +39,10 @@
<b>Compliance Status</b>
<br>
{{#equal complianceStatus "COMPLIANT"}}
<span><i class="fw fw-ok icon-success"></i>&nbsp;&nbsp;Compliant</span>
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
{{/equal}}
{{#equal complianceStatus "NON-COMPLIANT"}}
<span><i class="fw fw-warning icon-danger"></i>&nbsp;&nbsp;Not Compliant</span>
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
{{/equal}}
</div>
</div>
@ -58,7 +58,7 @@
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-view fw-stack-1x"></i>
</span>
&nbsp;View
View
</a>
</span>
</div>
@ -77,8 +77,8 @@
<tr data-type="selectable">
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
<td data-display="{{complianceStatus}}" data-grid-label="Status">
{{#equal complianceStatus true}}<span><i class="fw fw-ok icon-success"></i>&nbsp;&nbsp;Compliant</span>{{/equal}}
{{#equal complianceStatus false}}<span><i class="fw fw-warning icon-danger"></i>&nbsp;&nbsp;Not Compliant</span>{{/equal}}
{{#equal complianceStatus true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
{{#equal complianceStatus false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
</td>
</tr>
{{/each}}

@ -16,7 +16,7 @@
{{/if}}
</h1>
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
<div class="media">
<div class="media" id="device-owner" data-owner="{{deviceView.owner}}">
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
<div class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div>
</div>
@ -52,13 +52,13 @@
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Status</td>
<td style="padding:10px 15px;">
{{#equal deviceView.status "ACTIVE"}}<span><i
class="fw fw-ok icon-success"></i>&nbsp;&nbsp;Active</span>{{/equal}}
class="fw fw-ok icon-success"></i>Active</span>{{/equal}}
{{#equal deviceView.status "INACTIVE"}}<span><i
class="fw fw-warning icon-warning"></i>&nbsp;&nbsp;Inactive</span>{{/equal}}
class="fw fw-warning icon-warning"></i>Inactive</span>{{/equal}}
{{#equal deviceView.status "BLOCKED"}}<span><i
class="fw fw-remove icon-danger"></i>&nbsp;&nbsp;Blocked</span>{{/equal}}
class="fw fw-remove icon-danger"></i>Blocked</span>{{/equal}}
{{#equal deviceView.status "REMOVED"}}<span><i
class="fw fw-delete icon-danger"></i>&nbsp;&nbsp;Removed</span>{{/equal}}
class="fw fw-delete icon-danger"></i>Removed</span>{{/equal}}
</td>
</tr>
{{/if}}
@ -109,14 +109,14 @@
</tbody>
</table>
{{/defineZone}}
{{#if deviceView.isNotRemoved}}
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
Operations
</div>
<div class="add-margin-top-4x">
{{unit "mdm.unit.device.operation-bar" deviceType=deviceView.deviceType ownership=deviceView.ownership}}
</div>
{{/if}}
{{#if deviceView.isNotRemoved}}
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
Operations
</div>
<div class="add-margin-top-4x">
{{unit "mdm.unit.device.operation-bar" deviceType=deviceView.deviceType ownership=deviceView.ownership}}
</div>
{{/if}}
</div>
</div>
<div class="media tab-responsive">
@ -314,7 +314,7 @@
</div>
<div class="panel-heading display-none-xs">
Policy Compliance
&nbsp;&nbsp;
<span>
<a href="javascript:void(0);" id="refresh-policy">
<i class="fw fw-refresh"></i>
@ -331,7 +331,7 @@
</span>
<div id="policy-spinner"
class="wr-advance-operations-init add-padding-bottom-2x add-padding-bottom-4x hidden">
<i class="fw fw-settings fw-spin fw-2x"></i>&nbsp;&nbsp;Loading Policy
<i class="fw fw-settings fw-spin fw-2x"></i>Loading Policy
Compliance...
</div>
<div id="policy-list-container">
@ -364,7 +364,7 @@
<div id="map-error" class="message message-warning">
<h4 class="remove-margin">
<i class="icon fw fw-warning"></i>
&nbsp;Device location information is not available.
Device location information is not available.
</h4>
</div>
<p class="add-padding-5x"></p>
@ -388,7 +388,7 @@
</div>
<div class="panel-heading display-none-xs">
Installed Applications
&nbsp;&nbsp;
<span>
<a href="javascript:void(0);" id="refresh-apps">
<i class="fw fw-refresh"></i>

@ -115,7 +115,7 @@ function onRequest(context) {
}
} else if (deviceType == "ios") {
viewModel["BatteryLevel"] = {};
viewModel["BatteryLevel"]["value"] = filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BatteryLevel"];
viewModel["BatteryLevel"]["value"] = Math. round(filteredDeviceData["initialDeviceInfo"]["DEVICE_INFO"]["BatteryLevel"] * 10000) / 100;
viewModel["internalMemory"] = {};
viewModel["internalMemory"]["total"] = Math.

@ -147,14 +147,14 @@
<input id="user-roles-radio-btn" type="radio"
name="select-users-radio-btn"
class="select-users-radio" checked/>
<span class="helper">&nbsp;Set user role(s)</span>
<span class="helper">Set user role(s)</span>
</label>
{{/if}}
{{#if isAuthorizedViewUsers}}
<label class="wr-input-control radio light" rel="assetfilter">
<input id="users-radio-btn" type="radio" name="select-users-radio-btn"
class="select-users-radio"/>
<span class="helper">&nbsp;Set user(s)</span>
<span class="helper">Set user(s)</span>
</label>
{{/if}}
</div>
@ -231,8 +231,8 @@
<div class="wr-advance-operations">
<div class="wr-advance-operations-init">
<br>
&nbsp;&nbsp;&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;Loading platform features . . .
<i class="fw fw-settings fw-spin fw-2x"></i>
Loading platform features . . .
<br><br>
</div>
</div>
@ -249,8 +249,8 @@
</div>
<div id="loading-content" class="col-centered">
<br><br>
&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;Loading policy creation wizard . . .
<i class="fw fw-settings fw-spin fw-2x"></i>
Loading policy creation wizard . . .
<br><br>
</div>
<div class=" col-centered wr-content policy-platform hidden">

@ -47,10 +47,10 @@ var androidOperationConstants = {
"WIFI_OPERATION_CODE": "WIFI",
"VPN_OPERATION": "vpn",
"VPN_OPERATION_CODE": "VPN",
"APPLICATION_OPERATION":"app-restriction",
"APPLICATION_OPERATION_CODE":"APP-RESTRICTION",
"KIOSK_APPS_CODE":"KIOSK_APPS",
"KIOSK_APPS":"cosu-whitelisted-applications"
"APPLICATION_OPERATION": "app-restriction",
"APPLICATION_OPERATION_CODE": "APP-RESTRICTION",
"KIOSK_APPS_CODE": "KIOSK_APPS",
"KIOSK_APPS": "cosu-whitelisted-applications"
};
// Constants to define iOS Operation Constants
@ -1843,28 +1843,23 @@ validateStep["policy-profile"] = function () {
if (continueToCheckNextInputs) {
var calendarAccountPort = $("input#calendar-account-port").val();
if (!calendarAccountPort) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port is empty. You cannot proceed.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (!$.isNumeric(calendarAccountPort)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port requires a number input.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port is not within the range " +
if (calendarAccountPort) {
if (!$.isNumeric(calendarAccountPort)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port requires a number input.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port is not within the range " +
"of valid port numbers.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
}
}
@ -2387,8 +2382,6 @@ var savePolicy = function (policy, isActive, serviceURL) {
payload["roles"] = [];
}
console.log(JSON.stringify(payload));
invokerUtil.post(
serviceURL,
payload,
@ -2543,14 +2536,14 @@ var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) {
var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) {
var selectedValueOnChange = selectElement.value;
var i, slideDownVotes = 0;
for (i = 0; i < valueSet.length; i++) {
var slideDownVotes = 0;
for (var i = 0; i < valueSet.length; i++) {
if (selectedValueOnChange == valueSet[i]) {
slideDownVotes++;
}
}
var paneSelector = "#" + paneID;
if(slideDownVotes > 0) {
if (slideDownVotes > 0) {
$(paneSelector).removeClass("hidden");
} else {
$(paneSelector).addClass("hidden");
@ -2793,20 +2786,28 @@ $(document).ready(function () {
// <start - fixing feature-configuring switch double-click issue>
$(advanceOperations).on('hidden.bs.collapse', function (event) {
var collapsedFeatureBody = event.target.id;
var featureConfiguringSwitch = "#" + collapsedFeatureBody.
substr(0, collapsedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]";
var operation = collapsedFeatureBody.substr(0, collapsedFeatureBody.lastIndexOf("-"));
var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]";
var featureConfiguredIcon = "#" + operation + "-configured";
if ($(featureConfiguringSwitch).prop("checked") == true) {
$(featureConfiguringSwitch).prop("checked", false);
}
if (!$(featureConfiguredIcon).hasClass("hidden")) {
$(featureConfiguredIcon).addClass("hidden");
}
});
$(advanceOperations).on('shown.bs.collapse', function (event) {
var expandedFeatureBody = event.target.id;
var featureConfiguringSwitch = "#" + expandedFeatureBody.
substr(0, expandedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]";
var operation = expandedFeatureBody.substr(0, expandedFeatureBody.lastIndexOf("-"));
var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]";
var featureConfiguredIcon = "#" + operation + "-configured";
if ($(featureConfiguringSwitch).prop("checked") == false) {
$(featureConfiguringSwitch).prop("checked", true);
}
if ($(featureConfiguredIcon).hasClass("hidden")) {
$(featureConfiguredIcon).removeClass("hidden");
}
});
// <end - fixing feature-configuring switch double-click issue>

@ -24,11 +24,9 @@
<i class="fw fw-security fw-stack-2x"></i>
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('wifi', this)">
<span class="wr-hidden-operations-icon fw-stack">
@ -63,12 +61,11 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Application Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-system-update-policy', this)" class="hidden">
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-system-update-policy', this)" class="hide">
<span class="wr-hidden-operation-icon fw-stack">
<i class="fw fw-import fw-stack-2x"></i>
</span>
@ -77,7 +74,7 @@
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)" class="hidden">
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)" class="hide">
<span class="wr-hidden-operations-icon fw-stack">
<i class="fw fw-register fw-stack-2x"></i>
</span>
@ -103,12 +100,11 @@
<span class="text"></span>
</label>
</h2>
<div class="panel-title-description">
This configuration can be used to set a passcode policy to an Android Device.
Once this configuration profile is installed on a device, corresponding users will not be
able
to modify these settings on their devices.
</div>
<div class="panel-title-description">
This configuration can be used to set a passcode policy to an Android Device.
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</div>
<div id="passcode-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="passcode-policy-body">
@ -221,7 +217,7 @@
<label class="wr-input-label" for="passcodePolicyMaxFailedAttempts">
Maximum number of failed attempts
<span class="helper"
title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
title="The maximum number of failed password entry attempts. If the correct password is not entered within the defined number of attempts, the data on the device will be erased">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -259,8 +255,7 @@
</h2>
<div class="panel-title-description">
This configurations can be used to restrict certain settings on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be
able
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</div>
@ -697,11 +692,9 @@
</label>
</h2>
<div class="panel-title-description">
This configuration can be used to encrypt data on an Android device, when the device is
locked and
make it readable when the passcode is entered. Once this configuration profile is installed
on a device,
corresponding users will not be able to modify these settings on their devices.
This configuration can be used to encrypt data on an Android device, when the device is locked
and make it readable when the passcode is entered. Once this configuration profile is installed
on a device, corresponding users will not be able to modify these settings on their devices.
</div>
</div>
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel"
@ -744,8 +737,7 @@
</h2>
<div class="panel-title-description">
This configurations can be used to configure Wi-Fi access on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be
able
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</div>
@ -761,7 +753,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-ssid">
Service Set Identifier (SSID)*
<span class="helper" title="Identification of the wireless network to be configured.">
<span class="helper" title="Identification of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -774,8 +766,9 @@
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-type">
Security*
<span class="helper"
title="Security type of the wireless network to be configured. 802.1x EAP works with Android 4.3 and above devices only.">
<span class="helper"
title="Security type of the wireless network to be configured. 802.1x EAP works with
Android 4.3 and above devices only.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -791,12 +784,13 @@
<div class="wr-input-control" id="control-wifi-eap" style="display:none;">
<label class="wr-input-label" for="wifi-eap">
EAP Method
<span class="helper" title="EAP Method of the wireless network to be configured.">
<span class="helper" title="EAP Method of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select class="form-control operationDataKeys" id="wifi-eap"
onchange="changeAndroidWifiPolicyEAP(this, document.getElementById('wifi-type'))" data-key="wifiEAP">
onchange="changeAndroidWifiPolicyEAP(this, document.getElementById('wifi-type'))"
data-key="wifiEAP">
<option value="peap">PEAP</option>
<option value="tls">TLS</option>
<option value="ttls">TTLS</option>
@ -808,8 +802,8 @@
<div class="wr-input-control" id="control-wifi-phase2" style="display:none;">
<label class="wr-input-label" for="wifi-phase2">
Phase 2 Authentication
<span class="helper"
title="Phase 2 authentication of the wireless network to be configured.">
<span class="helper"
title="Phase 2 authentication of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -824,7 +818,7 @@
<div class="wr-input-control" id="control-wifi-provisioning" style="display:none;">
<label class="wr-input-label" for="wifi-provisioning">
Provisioning
<span class="helper" title="Provisioning of the wireless network to be configured.">
<span class="helper" title="Provisioning of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -838,7 +832,7 @@
<div class="wr-input-control" id="control-wifi-identity" style="display:none;">
<label class="wr-input-label" for="wifi-identity">
Identity
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -852,7 +846,7 @@
<div class="wr-input-control" id="control-wifi-anoidentity" style="display:none;">
<label class="wr-input-label" for="wifi-anoidentity">
Anonymous Identity
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -866,12 +860,13 @@
<div class="wr-input-control" id="control-wifi-cacert" style="display:none;">
<label class="wr-input-label" for="wifi-password">
CA Certificate
<span class="helper" title="CA Certificate for the wireless network.">
<span class="helper" title="CA Certificate for the wireless network.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<input id="wifi-cacert-upload" type="file" class="form-control"
onchange="base64EncodeFile(this, document.getElementById('wifi-cacert'), document.getElementById('wifi-cacert-name'))"/>
onchange="base64EncodeFile(this, document.getElementById('wifi-cacert'),
document.getElementById('wifi-cacert-name'))"/>
<input id="wifi-cacert" type="hidden" class="form-control operationDataKeys"
data-key="wifiCaCert" />
<input id="wifi-cacert-name" type="hidden" class="form-control operationDataKeys"
@ -879,8 +874,8 @@
</div>
<div class="wr-input-control" id="control-wifi-password" style="display:none;">
<label class="wr-input-label" for="wifi-password">
Password*
<span class="helper" title="Password for the wireless network.">
Password
<span class="helper required" title="Password for the wireless network.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -907,11 +902,12 @@
<span class="text"></span>
</label>
</h2>
<div class="panel-title-description">
This configuration can be used to create a black list or white list of applications.
</div>
<div class="panel-title-description">
This configuration can be used to create a black list or white list of applications.
</div>
</div>
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="app-restriction-body">
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="app-restriction-body">
<hr/>
<div id="app-restriction-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
@ -940,12 +936,13 @@
</span>
</label>
<br/>
<a href="#restricted-applications-grid" class="btn btn-secondary grid-input-add " data-click-event="add-form">
<a href="#restricted-applications-grid" class="btn btn-secondary grid-input-add "
data-click-event="add-form">
<span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
Add Application
</a>
<div id="restricted-applications"
@ -1018,8 +1015,7 @@
</h2>
<div class="panel-title-description">
This configurations can be used to configure VPN settings on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be
able
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</div>
@ -1035,7 +1031,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-server-address">
VPN Server Address*
<span class="helper" title="Address of the VPN server to be configured.">
<span class="helper" title="Address of the VPN server to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1045,7 +1041,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-server-port">
VPN Server Port
<span class="helper" title="Port of the VPN server to be configured.">
<span class="helper" title="Port of the VPN server to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1055,7 +1051,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-shared-secret">
Shared Secret
<span class="helper" title="Shared secret.">
<span class="helper" title="Shared secret.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1065,7 +1061,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-dns">
DNS Server
<span class="helper" title="DNS Server.">
<span class="helper" title="DNS Server.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1104,8 +1100,10 @@
</div>
<!--<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="work-profile-policy-allow-cross-profile" type="checkbox" class="form-control operationDataKeys" data-key="workProfilePolicyAllowCopyPaste" checked="checked" />
<span class="helper" title="Permit the use of repeating, ascending and descending character sequences">
<input id="work-profile-policy-allow-cross-profile" type="checkbox" class="form-control
operationDataKeys" data-key="workProfilePolicyAllowCopyPaste" checked="checked" />
<span class="helper" title="Permit the use of repeating, ascending and descending
character sequences">
Allow cross profile copy-paste
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
@ -1179,11 +1177,10 @@
</div>
</div>
</div>
<!-- cosu-system-update-policy -->
<div class="wr-hidden-operation hidden" data-operation="cosu-system-update-policy">
<div class="panel panel-default operation-data" data-operation="cosu-system-update-policy"
data-operation-code="SYSTEM_UPDATE_POLICY">
<div class="wr-hidden-operation hidden hide" data-operation="cosu-system-update-policy">
<div class="panel panel-default operation-data" data-operation="cosu-system-update-policy-body"
data-operation-code="SYSTEM_UPDATE_POLICY">
<div id="cosu-system-update-policy-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
System Update Policy (COSU)
@ -1196,13 +1193,12 @@
</h2>
<div class="panel-title-description">
This configuration can be used to set a passcode policy to an Android Device.
Once this configuration profile is installed on a device, corresponding users will not be
able
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</div>
<div id="cosu-system-update-policy-body hidden" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-system-update-policy-body">
aria-labelledby="cosu-system-update-policy-body">
<hr/>
<div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
@ -1217,25 +1213,35 @@
<br><br>
<label class="wr-input-control radio light">
<input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="automatic" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" checked/>
<span class="helper" title="Installs system update automatically as soon as one is available">
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="automatic"
onclick="slideDownPaneAgainstValueSetForRadioButtons(this,
'cosu-system-update-policy-window-select', ['window'])" checked/>
<span class="helper"
title="Installs system update automatically as soon as one is available">
Automatic
</span>
</label>
<label class="wr-input-control radio light">
<input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="postpone" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper" title="Incoming system update will be blocked for a maximum of 30 days">
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="postpone"
onclick="slideDownPaneAgainstValueSetForRadioButtons(this,
'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper"
title="Incoming system update will be blocked for a maximum of 30 days">
Postpone
</span>
</label>
<label class="wr-input-control radio light">
<input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="window" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper" title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="window"
onclick="slideDownPaneAgainstValueSetForRadioButtons(this,
'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper"
title="Install system update automatically within a daily maintenance window, for a
maximum of 30 days">
Window
</span>
</label>
@ -1258,8 +1264,8 @@
</span>
</label>
<select id="cosu-system-update-policy-window-start-time"
class="form-control operationDataKeys"
data-key="cosuSystemUpdatePolicyWindowStartTime" data-default="0">
class="form-control operationDataKeys"
data-key="cosuSystemUpdatePolicyWindowStartTime" data-default="0">
<option value="1440" selected="selected">12 AM</option>
<option value="60">1 AM</option>
<option value="120">2 AM</option>
@ -1294,8 +1300,8 @@
</span>
</label>
<select id="cosu-system-update-policy-window-end-time"
class="form-control operationDataKeys"
data-key="cosuSystemUpdatePolicyWindowEndTime" data-default="0">
class="form-control operationDataKeys"
data-key="cosuSystemUpdatePolicyWindowEndTime" data-default="0">
<option value="1440" selected="selected">12 AM</option>
<option value="60">1 AM</option>
<option value="120">2 AM</option>
@ -1326,16 +1332,15 @@
</div>
</div>
</div>
<!-- cosu-whitelist-applications -->
<div class="wr-hidden-operation hidden" data-operation="cosu-whitelisted-applications">
<div class="wr-hidden-operation hidden hide" data-operation="cosu-whitelisted-applications">
<div class="panel panel-default operation-data" data-operation="cosu-whitelisted-applications"
data-operation-code="KIOSK_APPS">
data-operation-code="KIOSK_APPS">
<div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Whitelist Applications (COSU)
<label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch" data-toggle="collapse"
data-target="#cosu-whitelisted-applications-body">
data-target="#cosu-whitelisted-applications-body">
<input type="checkbox"/>
<span class="helper"></span>
<span class="text"></span>
@ -1343,13 +1348,12 @@
</h2>
<div class="panel-title-description">
This configuration can be used to set a passcode policy to an Android Device.
Once this configuration profile is installed on a device, corresponding users will not be
able
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
</div>
<div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-whitelisted-applications-body">
aria-labelledby="cosu-whitelisted-applications-body">
<hr/>
<div id="cosu-whitelisted-applications-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
@ -1358,37 +1362,38 @@
<div class="wr-input-control">
<label class="wr-input-label" for="cosu-whitelisted-applications">
Whitelisted Applications to enter Lock Task Mode
<span class="helper" title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
<span class="helper" title="Configuration information specific to a given third-party VPN
solution. This has to be input as key/value pairs.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
<a href="#cosu-whitelisted-applications-grid" class="btn btn-secondary grid-input-add" data-click-event="add-form">
<a href="#cosu-whitelisted-applications-grid" class="btn btn-secondary grid-input-add"
data-click-event="add-form">
<span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
Add Application
</a>
</label>
<div id="cosu-whitelisted-applications"
class="operationDataKeys grouped-array-input multi-column-key-value-pair-array"
data-key="cosuWhitelistedApplications" data-column-count="2">
class="operationDataKeys grouped-array-input multi-column-key-value-pair-array"
data-key="cosuWhitelistedApplications" data-column-count="2">
<table class="table table-responsive table-striped">
<thead>
<tr>
<th>No:</th>
<th>Application Name / Description</th>
<th>Package Name</th>
<th></th>
</tr>
<tr>
<th>No:</th>
<th>Application Name / Description</th>
<th>Package Name</th>
<th></th>
</tr>
</thead>
<tbody data-add-form-container="#cosu-whitelisted-applications-grid">
<tr data-help-text="add-form">
<td colspan="4">
No entries added yet.
</td>
</tr>
<tr data-help-text="add-form">
<td colspan="4">
No entries added yet.
</td>
</tr>
</tbody>
</table>
<table class="template hidden">

@ -95,7 +95,7 @@
<label class="wr-input-control checkbox">
<input id="passcode-policy-allow-simple" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyAllowSimple" checked="checked" />
<span class="helper" title="Permit the use of repeating, ascending and descending character sequences">
&nbsp;&nbsp;&nbsp;Allow simple value
Allow simple value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -105,7 +105,7 @@
<label class="wr-input-control checkbox">
<input id="passcode-policy-require-alphanumeric" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric" checked="checked" />
<span class="helper" title="Require passcode to contain both letters and numbers">
&nbsp;&nbsp;&nbsp;Require alphanumeric value
Require alphanumeric value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -168,7 +168,9 @@
<br>
( Should be in between 1-to-730 days or none )
</label>
<input id="passcode-policy-max-passcode-age-in-days" type="text" class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays" maxlength="3" placeholder="[ Requires Number Input ]">
<input id="passcode-policy-max-passcode-age-in-days" type="text"
class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays"
maxlength="3" placeholder="[ Requires Number Input ]">
</div>
<div class="wr-input-control">
@ -180,17 +182,20 @@
<br>
( Should be in between 1-to-50 passcodes or none )
</label>
<input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys" data-key="passcodePolicyPasscodeHistory" maxlength="2" placeholder="[ Requires Number Input ]">
<input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys"
data-key="passcodePolicyPasscodeHistory" maxlength="2" placeholder="[ Requires Number Input ]">
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcodePolicyMaxFailedAttempts">
Maximum number of failed attempts
<span class="helper" title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
<span class="helper" title="Maximum number of passcode entry attempts allowed before all
data on a device will be erased">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys" data-key="passcodePolicyMaxFailedAttempts" data-default="0">
<select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys"
data-key="passcodePolicyMaxFailedAttempts" data-default="0">
<option value="" selected="selected">
None
</option>
@ -222,7 +227,8 @@
</label>
</h2>
<div class="panel-title-description">
This configuration can be used to restrict the usage of camera on an Windows device together with all the applications using the camera.
This configuration can be used to restrict the usage of camera on an Windows device together
with all the applications using the camera.
Once this configuration profile is installed on a device, corresponding users will not be able
to modify these settings on their devices.
</div>
@ -237,9 +243,11 @@
<br>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Usage of phone camera in the device.">
&nbsp;&nbsp;&nbsp;Allow use of camera
<input id="camera-enabled" type="checkbox" class="operationDataKeys"
data-key="cameraEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Usage of phone camera in
the device.">
Allow use of camera
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -252,7 +260,8 @@
<!-- encrypt-storage -->
<div class="wr-hidden-operation" data-operation="encrypt-storage">
<div class="panel panel-default operation-data" data-operation="encrypt-storage" data-operation-code="ENCRYPT_STORAGE">
<div class="panel panel-default operation-data" data-operation="encrypt-storage"
data-operation-code="ENCRYPT_STORAGE">
<div id="encrypt-storage-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Encryption Settings
@ -264,11 +273,12 @@
</h2>
<div class="panel-title-description">
This configuration can be used to encrypt data on an Windows device, when the device is locked and
make it readable when the passcode is entered. Once this configuration profile is installed on a device,
corresponding users will not be able to modify these settings on their devices.
make it readable when the passcode is entered. Once this configuration profile is installed on a
device, corresponding users will not be able to modify these settings on their devices.
</div>
</div>
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="encrypt-storage-body">
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="encrypt-storage-body">
<hr/>
<div id="encrypt-storage-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
@ -278,9 +288,10 @@
<br>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys" data-key="encryptStorageEnabled" checked="checked" />
<input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys"
data-key="encryptStorageEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Storage-encryption in the device">
&nbsp;&nbsp;&nbsp;Enable storage-encryption
Enable storage-encryption
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -292,7 +303,8 @@
<!-- /encrypt-storage -->
<!--app-restriction-->
<div class="wr-hidden-operation" data-operation="app-restriction">
<div class="panel panel-default operation-data" data-operation="app-restriction" data-operation-code="APP-RESTRICTION">
<div class="panel panel-default operation-data" data-operation="app-restriction"
data-operation-code="APP-RESTRICTION">
<div id="app-restriction-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Application Restriction Settings
@ -306,7 +318,8 @@
This configuration can be used to create a black list or white list of applications.
</div>
</div>
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="app-restriction-body">
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="app-restriction-body">
<hr/>
<div id="app-restriction-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
@ -327,16 +340,19 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
<a href="#restricted-applications-grid" class="btn btn-secondary grid-input-add" data-click-event="add-form">
<a href="#restricted-applications-grid" class="btn btn-secondary grid-input-add"
data-click-event="add-form">
<span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;
Add Application
</a>
</label>
<div id="restricted-applications" class="operationDataKeys grouped-array-input multi-column-key-value-pair-array" data-key="restrictedApplications" data-column-count="2">
<div id="restricted-applications"
class="operationDataKeys grouped-array-input multi-column-key-value-pair-array"
data-key="restrictedApplications" data-column-count="2">
<table class="table table-responsive table-striped">
<thead>
<tr>
@ -361,14 +377,19 @@
<span class="index"></span>
</td>
<td data-title="App Name">
<input type="text" class="form-control grid-input-text" data-child-key="appName" maxlength="100" data-default="" placeholder="[ Application Name or Description ]" />
<input type="text" class="form-control grid-input-text"
data-child-key="appName" maxlength="100" data-default=""
placeholder="[ Application Name or Description ]" />
</td>
<td data-title="Package Name">
<input type="text" class="form-control grid-input-text" data-child-key="packageName" maxlength="100" data-default="" placeholder="[ Package Name of Application ]" />
<input type="text" class="form-control grid-input-text"
data-child-key="packageName" maxlength="100" data-default=""
placeholder="[ Package Name of Application ]" />
</td>
<td>
<span class="list-group-item-actions">
<a href="#restricted-applications-grid" class="grid-input-remove" data-click-event="remove-form">
<a href="#restricted-applications-grid" class="grid-input-remove"
data-click-event="remove-form">
<span class="fw-stack helper" title="Remove Entry">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-delete fw-stack-1x"></i>
@ -460,7 +481,7 @@
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Installations-->
<!-- App Installations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
@ -504,7 +525,7 @@
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Uninstallations-->
<!-- App Uninstallations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#uninstallApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
@ -534,7 +555,7 @@
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;Web clips-->
<!-- Web clips-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installWebClip">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->

@ -142,14 +142,14 @@
<input id="user-roles-radio-btn" type="radio"
name="select-users-radio-btn" class="select-users-radio"
checked/>
<span class="helper">&nbsp;Set user role(s)</span>
<span class="helper"> Set user role(s)</span>
</label>
{{/if}}
{{#if isAuthorizedViewUsers}}
<label class="wr-input-control radio light" rel="assetfilter">
<input id="users-radio-btn" type="radio" name="select-users-radio-btn"
class="select-users-radio"/>
<span class="helper">&nbsp;Set user(s)</span>
<span class="helper"> Set user(s)</span>
</label>
{{/if}}
</div>
@ -231,9 +231,9 @@
<div class="wr-advance-operations">
<div class="wr-advance-operations-init">
<br>
&nbsp;&nbsp;
<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;Loading platform features . . .
Loading platform features . . .
<br>
<br>
</div>

@ -113,10 +113,10 @@ var androidOperationConstants = {
"ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE",
"WIFI_OPERATION": "wifi",
"WIFI_OPERATION_CODE": "WIFI",
"APPLICATION_OPERATION":"app-restriction",
"APPLICATION_OPERATION_CODE":"APP-RESTRICTION",
"KIOSK_APPS_CODE":"KIOSK_APPS",
"KIOSK_APPS":"cosu-whitelisted-applications"
"APPLICATION_OPERATION": "app-restriction",
"APPLICATION_OPERATION_CODE": "APP-RESTRICTION",
"KIOSK_APPS_CODE": "KIOSK_APPS",
"KIOSK_APPS": "cosu-whitelisted-applications"
};
// Constants to define Android Operation Constants
@ -524,8 +524,7 @@ validateStep["policy-profile"] = function () {
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
else {
} else {
childInputCount = 0;
childInputArray = [];
emptyChildInputCount = 0;
@ -565,8 +564,8 @@ validateStep["policy-profile"] = function () {
// If empty child inputs are present
validationStatus = {
"error": true,
"subErrorMsg": "One or more package names of " +
"applications are empty.",
"subErrorMsg": "One or more package names of applications are" +
" empty.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
@ -574,8 +573,7 @@ validateStep["policy-profile"] = function () {
// If duplicate input is present
validationStatus = {
"error": true,
"subErrorMsg": "Duplicate values exist with " +
"for package names.",
"subErrorMsg": "Duplicate values exist with for package names.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
@ -1603,28 +1601,23 @@ validateStep["policy-profile"] = function () {
if (continueToCheckNextInputs) {
var calendarAccountPort = $("input#calendar-account-port").val();
if (!calendarAccountPort) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port is empty. You cannot proceed.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (!$.isNumeric(calendarAccountPort)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port requires a number input.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port is not within the range " +
"of valid port numbers.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
if (calendarAccountPort) {
if (!$.isNumeric(calendarAccountPort)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port requires a number input.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (!inputIsValidAgainstRange(calendarAccountPort, 0, 65535)) {
validationStatus = {
"error": true,
"subErrorMsg": "Account Port is not within the range " +
"of valid port numbers.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
}
}
@ -2321,16 +2314,14 @@ var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) {
var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) {
var selectedValueOnChange = selectElement.value;
var i, slideDownVotes = 0;
for (i = 0; i < valueSet.length; i++) {
var slideDownVotes = 0;
for (var i = 0; i < valueSet.length; i++) {
if (selectedValueOnChange == valueSet[i]) {
slideDownVotes++;
}
}
var paneSelector = "#" + paneID;
if(slideDownVotes > 0) {
if (slideDownVotes > 0) {
$(paneSelector).removeClass("hidden");
} else {
$(paneSelector).addClass("hidden");
@ -2556,20 +2547,28 @@ $(document).ready(function () {
// <start - fixing feature-configuring switch double-click issue>
$(advanceOperations).on('hidden.bs.collapse', function (event) {
var collapsedFeatureBody = event.target.id;
var featureConfiguringSwitch = "#" + collapsedFeatureBody.
substr(0, collapsedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]";
var operation = collapsedFeatureBody.substr(0, collapsedFeatureBody.lastIndexOf("-"));
var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]";
var featureConfiguredIcon = "#" + operation + "-configured";
if ($(featureConfiguringSwitch).prop("checked") == true) {
$(featureConfiguringSwitch).prop("checked", false);
}
if (!$(featureConfiguredIcon).hasClass("hidden")) {
$(featureConfiguredIcon).addClass("hidden");
}
});
$(advanceOperations).on('shown.bs.collapse', function (event) {
var expandedFeatureBody = event.target.id;
var featureConfiguringSwitch = "#" + expandedFeatureBody.
substr(0, expandedFeatureBody.lastIndexOf("-")) + "-heading input[type=checkbox]";
var operation = expandedFeatureBody.substr(0, expandedFeatureBody.lastIndexOf("-"));
var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]";
var featureConfiguredIcon = "#" + operation + "-configured";
if ($(featureConfiguringSwitch).prop("checked") == false) {
$(featureConfiguringSwitch).prop("checked", true);
}
if ($(featureConfiguredIcon).hasClass("hidden")) {
$(featureConfiguredIcon).removeClass("hidden");
}
});
// <end - fixing feature-configuring switch double-click issue>

@ -86,11 +86,13 @@
<!--</span>-->
<!--Web clips-->
<!--</a>-->
<!--
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-system-update-policy', this)">
<span class="wr-hidden-operation-icon fw-stack">
<i class="fw fw-import fw-stack-2x"></i>
</span>
&nbsp;&nbsp;System Update Policy (COSU)
System Update Policy (COSU)
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
@ -104,6 +106,7 @@
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
-->
</div>
<div class="wr-hidden-operations-content col-lg-8">
@ -142,7 +145,7 @@
checked="checked"/>
<span class="helper"
title="Permit the use of repeating, ascending and descending character sequences">
&nbsp;&nbsp;&nbsp;Allow simple value
Allow simple value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -154,7 +157,7 @@
class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric"
checked="checked"/>
<span class="helper" title="Require passcode to contain both letters and numbers">
&nbsp;&nbsp;&nbsp;Require alphanumeric value
Require alphanumeric value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -240,7 +243,7 @@
<label class="wr-input-label" for="passcodePolicyMaxFailedAttempts">
Maximum number of failed attempts
<span class="helper"
title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
title="The maximum number of failed password entry attempts. If the correct password is not entered within the defined number of attempts, the data on the device will be erased">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -297,7 +300,7 @@
data-key="cameraEnabled" checked="checked"/>
<span class="helper"
title="Having this checked would enable Usage of phone camera in the device.">
&nbsp;&nbsp;&nbsp;Allow use of camera
Allow use of camera
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -311,7 +314,7 @@
<input id="volume-adjust-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowAdjustVolumeEnabled"/>
<span class="helper" title="Having this checked would disallow volume adjust.">
&nbsp;&nbsp;&nbsp;Disallow volume adjust
Disallow volume adjust
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -322,7 +325,7 @@
<input id="disallow-configuring-bluetooth-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowConfigBluetooth"/>
<span class="helper" title="Having this checked would disallow configuring bluetooth.">
&nbsp;&nbsp;&nbsp;Disallow configuring bluetooth.
Disallow configuring bluetooth.
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -334,7 +337,7 @@
class="operationDataKeys"
data-key="disallowConfigCellBroadcasts"/>
<span class="helper" title="Having this checked would disallow configuring cell broadcast.">
&nbsp;&nbsp;&nbsp;Disallow cell broadcast
Disallow cell broadcast
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -346,7 +349,7 @@
class="operationDataKeys"
data-key="disallowConfigCredentials"/>
<span class="helper" title="Having this checked would disallow configuring credentials.">
&nbsp;&nbsp;&nbsp;Disallow configuring credentials
Disallow configuring credentials
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -359,7 +362,7 @@
data-key="disallowConfigMobileNetworks"/>
<span class="helper"
title="Having this checked would disallow configuring mobile networks.">
&nbsp;&nbsp;&nbsp;Disallow configuring mobile networks
Disallow configuring mobile networks
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -371,7 +374,7 @@
class="operationDataKeys"
data-key="disallowConfigTethering"/>
<span class="helper" title="Having this checked would disallow configuring tethering.">
&nbsp;&nbsp;&nbsp;Disallow configuring tethering
Disallow configuring tethering
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -382,7 +385,7 @@
<input id="disallow-configuring-VPN-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowConfigVpn"/>
<span class="helper" title="Having this checked would disallow configuring VPN.">
&nbsp;&nbsp;&nbsp;Disallow configuring VPN
Disallow configuring VPN
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -393,7 +396,7 @@
<input id="disallow-configuring-Wifi-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowConfigWifi"/>
<span class="helper" title="Having this checked would disallow configuring Wifi.">
&nbsp;&nbsp;&nbsp;Disallow configuring Wifi
Disallow configuring Wifi
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -406,7 +409,7 @@
class="operationDataKeys"
data-key="disallowAppControl"/>
<span class="helper" title="Having this checked would disallow configuring app control.">
&nbsp;&nbsp;&nbsp;Disallow configuring app control
Disallow configuring app control
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -417,7 +420,7 @@
<input id="disallow-create-window-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowCreateWindows"/>
<span class="helper" title="Having this checked would disallow create window.">
&nbsp;&nbsp;&nbsp;Disallow create window
Disallow create window
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -429,7 +432,7 @@
class="operationDataKeys"
data-key="disallowCrossProfileCopyPaste"/>
<span class="helper" title="Having this checked would disallow cross profile copy paste.">
&nbsp;&nbsp;&nbsp;Disallow cross profile copy paste
Disallow cross profile copy paste
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -440,7 +443,7 @@
<input id="disallow-debugging-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowDebugging"/>
<span class="helper" title="Having this checked would disallow debugging.">
&nbsp;&nbsp;&nbsp;Disallow debuging
Disallow debuging
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -451,7 +454,7 @@
<input id="disallow-factory-reset-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowFactoryReset"/>
<span class="helper" title="Having this checked would disallow factory reset.">
&nbsp;&nbsp;&nbsp;Disallow factory reset
Disallow factory reset
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -462,7 +465,7 @@
<input id="disallow-add-user-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowAddUser"/>
<span class="helper" title="Having this checked would disallow add user.">
&nbsp;&nbsp;&nbsp;Disallow add user
Disallow add user
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -473,7 +476,7 @@
<input id="disallow-install-apps-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowInstallApps"/>
<span class="helper" title="Having this checked would disallow install apps.">
&nbsp;&nbsp;&nbsp;Disallow install apps
Disallow install apps
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -486,7 +489,7 @@
data-key="disallowInstallUnknownSources"/>
<span class="helper" title="Having this checked would disallow installing from unknown
sources.">
&nbsp;&nbsp;&nbsp;Disallow install from unknown sources
Disallow install from unknown sources
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -497,7 +500,7 @@
<input id="disallow-modify-accounts-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowModifyAccounts"/>
<span class="helper" title="Having this checked would disallow modify accounts.">
&nbsp;&nbsp;&nbsp;Disallow modify accounts
Disallow modify accounts
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -508,7 +511,7 @@
<input id="disallow-mount-physical-media-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowMountPhysicalMedia"/>
<span class="helper" title="Having this checked would disallow mount physical media.">
&nbsp;&nbsp;&nbsp;Disallow mount physical media
Disallow mount physical media
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -519,7 +522,7 @@
<input id="disallow-network-reset-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowNetworkReset"/>
<span class="helper" title="Having this checked would disallow network reset.">
&nbsp;&nbsp;&nbsp;Disallow network reset
Disallow network reset
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -530,7 +533,7 @@
<input id="disallow-outgoing-beam-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowOutgoingBeam"/>
<span class="helper" title="Having this checked would disallow outgoing beam.">
&nbsp;&nbsp;&nbsp;Disallow outgoing beam
Disallow outgoing beam
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -541,7 +544,7 @@
<input id="disallow-outgoing-calls-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowOutgoingCalls"/>
<span class="helper" title="Having this checked would disallow outgoing calls.">
&nbsp;&nbsp;&nbsp;Disallow outgoing calls
Disallow outgoing calls
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -552,7 +555,7 @@
<input id="disallow-remove-user-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowRemoveUser"/>
<span class="helper" title="Having this checked would disallow remove user.">
&nbsp;&nbsp;&nbsp;Disallow remove user
Disallow remove user
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -563,7 +566,7 @@
<input id="disallow-safe-boot-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowSafeBoot"/>
<span class="helper" title="Having this checked would disallow safe boot.">
&nbsp;&nbsp;&nbsp;Disallow safe boot
Disallow safe boot
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -574,7 +577,7 @@
<input id="disallow-location-sharing-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowLocationSharing"/>
<span class="helper" title="Having this checked would disallow location sharing.">
&nbsp;&nbsp;&nbsp;Disallow location sharing
Disallow location sharing
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -585,7 +588,7 @@
<input id="disallow-SMS-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowSMS"/>
<span class="helper" title="Having this checked would disallow SMS.">
&nbsp;&nbsp;&nbsp;Disallow SMS
Disallow SMS
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -596,7 +599,7 @@
<input id="disallow-uninstall-apps-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowUninstallApps"/>
<span class="helper" title="Having this checked would disallow uninstall apps.">
&nbsp;&nbsp;&nbsp;Disallow uninstall apps
Disallow uninstall apps
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -607,7 +610,7 @@
<input id="disallow-unmute-microphone-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowUnmuteMicrophone"/>
<span class="helper" title="Having this checked would disallow unmute microphone.">
&nbsp;&nbsp;&nbsp;Disallow unmute microphone
Disallow unmute microphone
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -618,7 +621,7 @@
<input id="disallow-USB-transfer-enabled" type="checkbox" class="operationDataKeys"
data-key="disallowUSBFileTransfer"/>
<span class="helper" title="Having this checked would disallow USB file transfer.">
&nbsp;&nbsp;&nbsp;Disallow USB file transfer
Disallow USB file transfer
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -630,7 +633,7 @@
class="operationDataKeys"
data-key="disallowParentProfileAppLinking"/>
<span class="helper" title="Having this checked would disallow parent profile app linking.">
&nbsp;&nbsp;&nbsp;Disallow parent profile app linking
Disallow parent profile app linking
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -641,7 +644,7 @@
<input id="ensure-verifying-apps-enabled" type="checkbox" class="operationDataKeys"
data-key="ensureVerifyApps"/>
<span class="helper" title="Having this checked would ensure verifying apps .">
&nbsp;&nbsp;&nbsp;Ensure verifying apps
Ensure verifying apps
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -652,7 +655,7 @@
<input id="enable-auto-timing-enabled" type="checkbox" class="operationDataKeys"
data-key="enableAutoTime"/>
<span class="helper" title="Having this checked would enable auto timing .">
&nbsp;&nbsp;&nbsp;Enable auto timing
Enable auto timing
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -663,7 +666,7 @@
<input id="disable-screen-capture-enabled" type="checkbox" class="operationDataKeys"
data-key="disableScreenCapture"/>
<span class="helper" title="Having this checked would disable screen capture .">
&nbsp;&nbsp;&nbsp;Disable screen capture
Disable screen capture
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -678,7 +681,7 @@
<input id="disable-status-bar-enabled" type="checkbox" class="operationDataKeys"
data-key="disableStatusBar"/>
<span class="helper" title="Having this checked would disable status bar .">
&nbsp;&nbsp;&nbsp;Disable status bar
Disable status bar
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -726,7 +729,7 @@
data-key="encryptStorageEnabled" checked="checked"/>
<span class="helper"
title="Having this checked would enable Storage-encryption in the device">
&nbsp;&nbsp;&nbsp;Enable storage-encryption
Enable storage-encryption
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -784,7 +787,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-ssid">
Service Set Identifier (SSID) *
<span class="helper" title="Identification of the wireless network to be configured.">
<span class="helper" title="Identification of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
@ -796,8 +799,8 @@
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-type">
Security*
<span class="helper"
title="Security type of the wireless network to be configured. 802.1x EAP works with Android 4.3 and above devices only.">
<span class="helper"
title="Security type of the wireless network to be configured. 802.1x EAP works with Android 4.3 and above devices only.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -813,7 +816,7 @@
<div class="wr-input-control" id="control-wifi-eap" style="display:none;">
<label class="wr-input-label" for="wifi-eap">
EAP Method
<span class="helper" title="EAP Method of the wireless network to be configured.">
<span class="helper" title="EAP Method of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -831,8 +834,8 @@
<div class="wr-input-control" id="control-wifi-phase2" style="display:none;">
<label class="wr-input-label" for="wifi-phase2">
Phase 2 Authentication
<span class="helper"
title="Phase 2 authentication of the wireless network to be configured.">
<span class="helper"
title="Phase 2 authentication of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -847,7 +850,7 @@
<div class="wr-input-control" id="control-wifi-provisioning" style="display:none;">
<label class="wr-input-label" for="wifi-provisioning">
Provisioning
<span class="helper" title="Provisioning of the wireless network to be configured.">
<span class="helper" title="Provisioning of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -862,7 +865,7 @@
<div class="wr-input-control" id="control-wifi-identity" style="display:none;">
<label class="wr-input-label" for="wifi-identity">
Identity
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -876,7 +879,7 @@
<div class="wr-input-control" id="control-wifi-anoidentity" style="display:none;">
<label class="wr-input-label" for="wifi-anoidentity">
Anonymous Identity
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="helper" title="Identity of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -890,7 +893,7 @@
<div class="wr-input-control" id="control-wifi-cacert" style="display:none;">
<label class="wr-input-label" for="wifi-password">
CA Certificate
<span class="helper" title="CA Certificate for the wireless network.">
<span class="helper" title="CA Certificate for the wireless network.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -903,10 +906,10 @@
</div>
<div class="wr-input-control" id="control-wifi-password" style="display:none;">
<label class="wr-input-label" for="wifi-password">
Password*
<span class="helper" title="Password for the wireless network.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
Password
<span class="helper required" title="Password for the wireless network.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<input id="wifi-password" type="password" class="form-control operationDataKeys"
data-key="wifiPassword" maxlength="100"/>
@ -964,12 +967,13 @@
</span>
</label>
<br/>
<a href="#restricted-applications-grid" class="btn btn-secondary grid-input-add " data-click-event="add-form">
<a href="#restricted-applications-grid" class="btn btn-secondary grid-input-add "
data-click-event="add-form">
<span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;
Add Application
</a>
<div id="restricted-applications"
@ -1059,7 +1063,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-server-address">
VPN Server Address*
<span class="helper" title="Address of the VPN server to be configured.">
<span class="helper" title="Address of the VPN server to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1069,7 +1073,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-server-port">
VPN Server Port
<span class="helper" title="Port of the VPN server to be configured.">
<span class="helper" title="Port of the VPN server to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1079,7 +1083,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-shared-secret">
Shared Secret
<span class="helper" title="Shared secret.">
<span class="helper" title="Shared secret.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1089,7 +1093,7 @@
<div class="wr-input-control">
<label class="wr-input-label" for="vpn-dns">
DNS Server
<span class="helper" title="DNS Server.">
<span class="helper" title="DNS Server.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1107,7 +1111,7 @@
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Installations-->
<!--App Installations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
@ -1151,7 +1155,7 @@
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Uninstallations-->
<!--App Uninstallations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#uninstallApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
@ -1181,7 +1185,7 @@
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;Web clips-->
<!--Web clips-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installWebClip">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
@ -1238,7 +1242,7 @@
<label class="wr-input-control checkbox">
<input id="work-profile-policy-allow-cross-profile" type="checkbox" class="form-control operationDataKeys" data-key="workProfilePolicyAllowCopyPaste" checked="checked" />
<span class="helper" title="Permit the use of repeating, ascending and descending character sequences">
&nbsp;&nbsp;&nbsp;Allow cross profile copy-paste
Allow cross profile copy-paste
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -1311,7 +1315,6 @@
</div>
</div>
</div>
<!-- cosu-system-update-policy -->
<div class="wr-hidden-operation" data-operation="cosu-system-update-policy">
<div class="panel panel-default operation-data" data-operation="cosu-system-update-policy"
@ -1337,7 +1340,8 @@
<div id="cosu-system-update-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-system-update-policy-body">
<div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden" role="alert">
<div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden"
role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="wr-input-control">
@ -1351,25 +1355,32 @@
<label class="wr-input-control radio light">
<input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="automatic" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" checked/>
<span class="helper" title="Installs system update automatically as soon as one is available">
&nbsp;Automatic
value="automatic"
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"
checked/>
<span class="helper"
title="Installs system update automatically as soon as one is available">
Automatic
</span>
</label>
<label class="wr-input-control radio light">
<input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="postpone" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper" title="Incoming system update will be blocked for a maximum of 30 days">
&nbsp;Postpone
value="postpone"
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper"
title="Incoming system update will be blocked for a maximum of 30 days">
Postpone
</span>
</label>
<label class="wr-input-control radio light">
<input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="window" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper" title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
&nbsp;Window
value="window"
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])"/>
<span class="helper"
title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
Window
</span>
</label>
</div>
@ -1460,7 +1471,6 @@
</div>
</div>
</div>
<!-- cosu-whitelist-applications -->
<div class="wr-hidden-operation" data-operation="cosu-whitelisted-applications">
<div class="panel panel-default operation-data" data-operation="cosu-whitelisted-applications"
@ -1468,7 +1478,8 @@
<div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Whitelist Applications (COSU)
<label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch" data-toggle="collapse"
<label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch"
data-toggle="collapse"
data-target="#cosu-whitelisted-applications-body">
<input type="checkbox"/>
<span class="helper"></span>
@ -1476,7 +1487,8 @@
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to whitelist applications in lock task mode of an Android Device in COSU.
This configuration can be used to whitelist applications in lock task mode of an Android
Device in COSU.
Once this configuration profile is installed on a device, corresponding users will not be
able
to modify these settings on their devices.
@ -1486,22 +1498,25 @@
<div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-whitelisted-applications-body">
<div id="cosu-whitelisted-applications-feature-error-msg" class="alert alert-danger hidden" role="alert">
<div id="cosu-whitelisted-applications-feature-error-msg" class="alert alert-danger hidden"
role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="cosu-whitelisted-applications">
Whitelisted Applications to enter Lock Task Mode
<span class="helper" title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
<span class="helper"
title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
<br>
<a href="#cosu-whitelisted-applications-grid" class="grid-input-add" data-click-event="add-form">
<a href="#cosu-whitelisted-applications-grid" class="btn btn-secondary grid-input-add"
data-click-event="add-form">
<span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-ring fw-stack-2x"></i>
</span>
&nbsp;
Add Application
</a>
</label>
@ -1527,19 +1542,21 @@
</table>
<table class="template hidden">
<tbody data-add-form="#cosu-whitelisted-applications-grid">
<tr data-add-form-element="clone">
<td data-title="No:">
<span class="index"></span>
</td>
<td data-title="Application Name / Description">
<input type="text" class="form-control grid-input-text" data-child-key="appName"
maxlength="100" data-default="" placeholder="[ Application Name / Description ]"/>
</td>
<td data-title="Package Name">
<input type="text" class="form-control grid-input-text" data-child-key="packageName"
maxlength="100" data-default="" placeholder="[ Package Name ]"/>
</td>
<td>
<tr data-add-form-element="clone">
<td data-title="No:">
<span class="index"></span>
</td>
<td data-title="Application Name / Description">
<input type="text" class="form-control grid-input-text" data-child-key="appName"
maxlength="100" data-default=""
placeholder="[ Application Name / Description ]"/>
</td>
<td data-title="Package Name">
<input type="text" class="form-control grid-input-text"
data-child-key="packageName"
maxlength="100" data-default="" placeholder="[ Package Name ]"/>
</td>
<td>
<span class="list-group-item-actions">
<a href="#cosu-whitelisted-applications-grid" class="grid-input-remove"
data-click-event="remove-form">
@ -1549,8 +1566,8 @@
</span>
</a>
</span>
</td>
</tr>
</td>
</tr>
</tbody>
</table>
</div>

@ -1954,8 +1954,8 @@ var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) {
var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) {
var selectedValueOnChange = selectElement.value;
var i, slideDownVotes = 0;
for (i = 0; i < valueSet.length; i++) {
var slideDownVotes = 0;
for (var i = 0; i < valueSet.length; i++) {
if (selectedValueOnChange == valueSet[i]) {
slideDownVotes++;
}

@ -5,7 +5,8 @@
<i class="fw fw-key fw-stack-2x"></i>
</span>
Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
@ -23,9 +24,11 @@
<i class="fw fw-security fw-stack-2x"></i>
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i class="fw fw-error"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('wifi', this)">
<span class="wr-hidden-operations-icon fw-stack">
@ -37,46 +40,50 @@
<span id="wifi-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('install-apps', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-application fw-stack-2x"></i>-->
<!--</span>-->
<!--App Installations-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-application fw-stack-2x"></i>-->
<!--</span>-->
<!--App Installations-->
<!--</a>-->
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('blacklist-apps', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-block fw-stack-2x"></i>-->
<!--</span>-->
<!--App Blacklisting-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-block fw-stack-2x"></i>-->
<!--</span>-->
<!--App Blacklisting-->
<!--</a>-->
<!--<a href="javascript:void(0)" onclick="showAdvanceOperation('web-clips', this)">-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-website fw-stack-2x"></i>-->
<!--</span>-->
<!--Web clips-->
<!--<span class="wr-hidden-operations-icon fw-stack">-->
<!--<i class="fw fw-website fw-stack-2x"></i>-->
<!--</span>-->
<!--Web clips-->
<!--</a>-->
</div>
<div class="wr-hidden-operations-content col-lg-8">
<!-- passcode-policy -->
<div class="wr-hidden-operation" data-operation="passcode-policy" style="display: block">
<div class="panel panel-default operation-data" data-operation="passcode-policy" data-operation-code="PASSCODE_POLICY">
<div class="panel panel-default operation-data" data-operation="passcode-policy"
data-operation-code="PASSCODE_POLICY">
<div id="passcode-policy-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Passcode Policy
<label id="passcode-policy-lbl" class="wr-input-control switch" data-toggle="collapse" data-target="#passcode-policy-body">
<input type="checkbox" />
<label id="passcode-policy-lbl" class="wr-input-control switch" data-toggle="collapse"
data-target="#passcode-policy-body">
<input type="checkbox"/>
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to set a passcode policy to an Android Device.
Once this configuration profile is installed on a device, corresponding users will not be able
Once this configuration profile is installed on a device, corresponding users will not be
able
to modify these settings on their devices.
</div>
</h2>
</div>
<div id="passcode-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="passcode-policy-body">
<div id="passcode-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="passcode-policy-body">
<div id="passcode-policy-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
@ -84,9 +91,12 @@
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="passcode-policy-allow-simple" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyAllowSimple" checked="checked" />
<span class="helper" title="Permit the use of repeating, ascending and descending character sequences">
&nbsp;&nbsp;&nbsp;Allow simple value
<input id="passcode-policy-allow-simple" type="checkbox"
class="form-control operationDataKeys" data-key="passcodePolicyAllowSimple"
checked="checked"/>
<span class="helper"
title="Permit the use of repeating, ascending and descending character sequences">
Allow simple value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -94,9 +104,11 @@
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="passcode-policy-require-alphanumeric" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric" checked="checked" />
<input id="passcode-policy-require-alphanumeric" type="checkbox"
class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric"
checked="checked"/>
<span class="helper" title="Require passcode to contain both letters and numbers">
&nbsp;&nbsp;&nbsp;Require alphanumeric value
Require alphanumeric value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -109,7 +121,8 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-min-length" class="form-control operationDataKeys" data-key="passcodePolicyMinLength" data-default="0">
<select id="passcode-policy-min-length" class="form-control operationDataKeys"
data-key="passcodePolicyMinLength" data-default="0">
<option value="" selected="selected">
None
</option>
@ -131,11 +144,13 @@
<div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-min-complex-chars">
Minimum number of complex characters
<span class="helper" title="Minimum number of complex or non-alphanumeric characters allowed in a passcode">
<span class="helper"
title="Minimum number of complex or non-alphanumeric characters allowed in a passcode">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-min-complex-chars" class="form-control operationDataKeys" data-key="passcodePolicyMinComplexChars" data-default="0">
<select id="passcode-policy-min-complex-chars" class="form-control operationDataKeys"
data-key="passcodePolicyMinComplexChars" data-default="0">
<option value="" selected="selected">
None
</option>
@ -156,7 +171,9 @@
<br>
( Should be in between 1-to-730 days or none )
</label>
<input id="passcode-policy-max-passcode-age-in-days" type="text" class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays" maxlength="3">
<input id="passcode-policy-max-passcode-age-in-days" type="text"
class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays"
maxlength="3">
</div>
<div class="wr-input-control">
@ -168,17 +185,20 @@
<br>
( Should be in between 1-to-50 passcodes or none )
</label>
<input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys" data-key="passcodePolicyPasscodeHistory" maxlength="2">
<input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys"
data-key="passcodePolicyPasscodeHistory" maxlength="2">
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="passcodePolicyMaxFailedAttempts">
Maximum number of failed attempts
<span class="helper" title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
<span class="helper"
title="The maximum number of failed password entry attempts. If the correct password is not entered within the defined number of attempts, the data on the device will be erased">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys" data-key="passcodePolicyMaxFailedAttempts" data-default="0">
<select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys"
data-key="passcodePolicyMaxFailedAttempts" data-default="0">
<option value="" selected="selected">
None
</option>
@ -204,19 +224,22 @@
<h2 class="sub-title panel-title">
Restrictions on Camera
<label class="wr-input-control switch" data-toggle="collapse" data-target="#camera-body">
<input type="checkbox" />
<input type="checkbox"/>
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to restrict the usage of camera on an Android device together with all the applications using the camera.
Once this configuration profile is installed on a device, corresponding users will not be able
This configuration can be used to restrict the usage of camera on an Android device together
with all the applications using the camera.
Once this configuration profile is installed on a device, corresponding users will not be
able
to modify these settings on their devices.
</div>
</h2>
</div>
<div id="camera-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="camera-body">
<div id="camera-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="camera-body">
<div id="camera-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
@ -225,9 +248,11 @@
<br>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Usage of phone camera in the device.">
&nbsp;&nbsp;&nbsp;Allow use of camera
<input id="camera-enabled" type="checkbox" class="operationDataKeys"
data-key="cameraEnabled" checked="checked"/>
<span class="helper"
title="Having this checked would enable Usage of phone camera in the device.">
Allow use of camera
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -240,24 +265,29 @@
<!-- encrypt-storage -->
<div class="wr-hidden-operation" data-operation="encrypt-storage">
<div class="panel panel-default operation-data" data-operation="encrypt-storage" data-operation-code="ENCRYPT_STORAGE">
<div class="panel panel-default operation-data" data-operation="encrypt-storage"
data-operation-code="ENCRYPT_STORAGE">
<div id="encrypt-storage-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title">
Encryption Settings
<label class="wr-input-control switch" data-toggle="collapse" data-target="#encrypt-storage-body">
<input type="checkbox" />
<label class="wr-input-control switch" data-toggle="collapse"
data-target="#encrypt-storage-body">
<input type="checkbox"/>
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configuration can be used to encrypt data on an Android device, when the device is locked and
make it readable when the passcode is entered. Once this configuration profile is installed on a device,
This configuration can be used to encrypt data on an Android device, when the device is
locked and
make it readable when the passcode is entered. Once this configuration profile is installed
on a device,
corresponding users will not be able to modify these settings on their devices.
</div>
</h2>
</div>
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="encrypt-storage-body">
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="encrypt-storage-body">
<div id="encrypt-storage-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
@ -266,9 +296,11 @@
<br>
<div class="wr-input-control">
<label class="wr-input-control checkbox">
<input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys" data-key="encryptStorageEnabled" checked="checked" />
<span class="helper" title="Having this checked would enable Storage-encryption in the device">
&nbsp;&nbsp;&nbsp;Enable storage-encryption
<input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys"
data-key="encryptStorageEnabled" checked="checked"/>
<span class="helper"
title="Having this checked would enable Storage-encryption in the device">
Enable storage-encryption
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
@ -286,62 +318,66 @@
<h2 class="sub-title panel-title">
Wi-Fi Settings
<label class="wr-input-control switch" data-toggle="collapse" data-target="#wifi-body">
<input type="checkbox" />
<input type="checkbox"/>
<span class="helper"></span>
<span class="text"></span>
</label>
<hr>
<div class="panel-title-description">
This configurations can be used to configure Wi-Fi access on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be able
Once this configuration profile is installed on a device, corresponding users will not be
able
to modify these settings on their devices.
</div>
</h2>
</div>
<div id="wifi-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="wifi-body">
<div id="wifi-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="wifi-body">
<!--<div class="cloneable">-->
<!--<a href="#" class="multi-view add enabled">-->
<!--<span class="icon fw-stack">-->
<!--<i class="fw fw-add fw-stack-1x"></i>-->
<!--<i class="fw fw-ring fw-stack-2x"></i>-->
<!--</span>-->
<!--</a>-->
<!--<a href="#" class="multi-view remove disabled">-->
<!--<span class="icon fw-stack">-->
<!--<i class="fw fw-minus fw-stack-1x"></i>-->
<!--<i class="fw fw-ring fw-stack-2x"></i>-->
<!--</span>-->
<!--</a>-->
<!--Wi-Fi Setting :-->
<!--<br>-->
<!--<br>-->
Please note that * sign represents required fields of data.
<br>
<br>
<div id="wifi-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-ssid">
Service Set Identifier (SSID)*
<span class="helper" title="Identification of the wireless network to be configured.">
<!--<a href="#" class="multi-view add enabled">-->
<!--<span class="icon fw-stack">-->
<!--<i class="fw fw-add fw-stack-1x"></i>-->
<!--<i class="fw fw-ring fw-stack-2x"></i>-->
<!--</span>-->
<!--</a>-->
<!--<a href="#" class="multi-view remove disabled">-->
<!--<span class="icon fw-stack">-->
<!--<i class="fw fw-minus fw-stack-1x"></i>-->
<!--<i class="fw fw-ring fw-stack-2x"></i>-->
<!--</span>-->
<!--</a>-->
<!--Wi-Fi Setting :-->
<!--<br>-->
<!--<br>-->
Please note that * sign represents required fields of data.
<br>
<br>
<div id="wifi-feature-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-ssid">
Service Set Identifier (SSID)*
<span class="helper" title="Identification of the wireless network to be configured.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<label id="wifiSsidValidationText" class="wr-input-label hidden">
Service Set Identifier should be 1-to-30 characters long
</label>
<input id="wifi-ssid" type="text" class="form-control operationDataKeys" data-key="wifiSSID" maxlength="100" placeholder="[ Should be 1-to-30 characters long ]"/>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-password">
Password*
<span class="helper" title="Password for the wireless network.">
</label>
<label id="wifiSsidValidationText" class="wr-input-label hidden">
Service Set Identifier should be 1-to-30 characters long
</label>
<input id="wifi-ssid" type="text" class="form-control operationDataKeys" data-key="wifiSSID"
maxlength="100" placeholder="[ Should be 1-to-30 characters long ]"/>
</div>
<div class="wr-input-control">
<label class="wr-input-label" for="wifi-password">
Password
<span class="helper required" title="Password for the wireless network.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<input id="wifi-password" type="password" class="form-control operationDataKeys" data-key="wifiPassword" maxlength="100" />
</div>
</label>
<input id="wifi-password" type="password" class="form-control operationDataKeys"
data-key="wifiPassword" maxlength="100"/>
</div>
<!--</div>-->
</div>
</div>
@ -350,108 +386,108 @@
<!-- install-applications -->
<!--<div class="wr-hidden-operation" data-operation="install-apps">-->
<!--<div class="panel panel-default operation-data" data-operation="INSTALL_APPLICATION">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Installations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="installApp" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="installApp">-->
<!--<div id="install-app-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Application Identifier">App Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="panel panel-default operation-data" data-operation="INSTALL_APPLICATION">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!-- App Installations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="installApp" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="installApp">-->
<!--<div id="install-app-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Application Identifier">App Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="package-name" data-key="packageName" placeholder="Enter App Identifier"/>-->
<!--</div>-->
<!--<div class="wr-input-control">-->
<!--<label class="wr-input-control dropdown">-->
<!--<span class="helper" title="App Type">App Type<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>-->
<!--<select class="form-control col-sm-8 operationDataKeys appTypesInput" id="type" data-key="type">-->
<!--<option>Public</option>-->
<!--<option>Enterprise</option>-->
<!--</select>-->
<!--</label>-->
<!--</div>-->
<!--<label class="wr-input-label" title="URL">URL<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="package-name" data-key="packageName" placeholder="Enter App Identifier"/>-->
<!--</div>-->
<!--<div class="wr-input-control">-->
<!--<label class="wr-input-control dropdown">-->
<!--<span class="helper" title="App Type">App Type<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>-->
<!--<select class="form-control col-sm-8 operationDataKeys appTypesInput" id="type" data-key="type">-->
<!--<option>Public</option>-->
<!--<option>Enterprise</option>-->
<!--</select>-->
<!--</label>-->
<!--</div>-->
<!--<label class="wr-input-label" title="URL">URL<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="url" data-key="url" placeholder="Enter URL"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="url" data-key="url" placeholder="Enter URL"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /install-applications -->
<!-- /uninstall-applications -->
<!--<div class="wr-hidden-operation" data-operation="uninstall-apps">-->
<!--<div class="panel panel-default operation-data" data-operation="UNINSTALL_APPLICATION">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;App Uninstallations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#uninstallApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="uninstallApp" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="uninstallApp">-->
<!--<div id="uninstall-app-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Application Identifier">App Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<!--span>Identification of the wireless network to connect to</span-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="package-name" data-key="packageName" placeholder="Enter App Identifier"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="panel panel-default operation-data" data-operation="UNINSTALL_APPLICATION">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!-- App Uninstallations-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#uninstallApp">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="uninstallApp" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="uninstallApp">-->
<!--<div id="uninstall-app-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Application Identifier">App Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<!--span>Identification of the wireless network to connect to</span-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="package-name" data-key="packageName" placeholder="Enter App Identifier"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /uninstall-applications -->
<!-- /web-clips -->
<!--<div class="wr-hidden-operation" data-operation="web-clips">-->
<!--<div class="panel panel-default operation-data" data-operation="WEBCLIP">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!--&nbsp;&nbsp;&nbsp;Web clips-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installWebClip">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="installWebClip" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="installWebClip">-->
<!--<div id="install-webclip-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Title of the web clip">Title<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="title" data-key="title" placeholder="Enter Title"/>-->
<!--</div>-->
<!--<label class="wr-input-label" title="URL">URL<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="url" data-key="url" placeholder="Enter URL"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--<div class="panel panel-default operation-data" data-operation="WEBCLIP">-->
<!--<div class="panel-heading" role="tab">-->
<!--<h2 class="sub-title panel-title">-->
<!--<br>-->
<!-- Web clips-->
<!--<label class="wr-input-control switch" data-toggle="collapse" data-target="#installWebClip">-->
<!--<input type="checkbox" />-->
<!--<span class="helper"></span>-->
<!--<span class="text"></span>-->
<!--</label>-->
<!--<br>-->
<!--<br>-->
<!--</h2>-->
<!--</div>-->
<!--<div id="installWebClip" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="installWebClip">-->
<!--<div id="install-webclip-feature-error-msg" class="alert alert-danger hidden" role="alert">-->
<!--<i class="icon fw fw-error"></i><span></span>-->
<!--</div>-->
<!--<label class="wr-input-label" title="Title of the web clip">Title<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="title" data-key="title" placeholder="Enter Title"/>-->
<!--</div>-->
<!--<label class="wr-input-label" title="URL">URL<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>-->
<!--<div class="wr-input-control">-->
<!--<input type="text" class="form-control operationDataKeys" id="url" data-key="url" placeholder="Enter URL"/>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!--</div>-->
<!-- /web-clips -->
</div>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save