From a7cbe01e7ce2ea570e4680ddd4282a974c818780 Mon Sep 17 00:00:00 2001 From: Nipun Nadeen De Silva Date: Tue, 3 Mar 2020 05:47:36 +0000 Subject: [PATCH] Create the App usage time configuration policy --- .../public/js/operation-mod.js | 18 +- .../public/js/android-policy-edit.js | 337 +++++++++++++++++- .../public/templates/android-policy-edit.hbs | 163 +++++++++ .../public/templates/android-policy-view.hbs | 161 +++++++++ .../public/js/android-policy-operations.js | 335 ++++++++++++++++- .../templates/android-policy-operations.hbs | 164 +++++++++ 6 files changed, 1174 insertions(+), 4 deletions(-) diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-mod/public/js/operation-mod.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-mod/public/js/operation-mod.js index 9db096b41..cef753d78 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-mod/public/js/operation-mod.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-mod/public/js/operation-mod.js @@ -111,7 +111,8 @@ var androidOperationModule = function () { "DISALLOW_REMOVE_USER": "DISALLOW_REMOVE_USER", "DISALLOW_DATA_ROAMING": "DISALLOW_DATA_ROAMING", "CERT_ADD_OPERATION_CODE": "INSTALL_CERT", - "DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE": "DISPLAY_MESSAGE_CONFIGURATION" + "DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE": "DISPLAY_MESSAGE_CONFIGURATION", + "APPLICATION_LIST_OPERATION_CODE": "APPLICATION_LIST" }; /** @@ -344,6 +345,12 @@ var androidOperationModule = function () { "disabledSettingSupportMessage": operationPayload["disabledSettingSupportMessage"] }; break; + case androidOperationConstants["APPLICATION_LIST_OPERATION_CODE"]: + payload = { + "appUsageTimeCategory": "screenUsageTime", + "appTimeData": operationPayload["appTimeData"] + }; + break; } return payload; }; @@ -740,6 +747,15 @@ var androidOperationModule = function () { } }; break; + case androidOperationConstants["APPLICATION_LIST_OPERATION_CODE"]: + operationType = operationTypeConstants["PROFILE"]; + payload = { + "operation": { + "appUsageTimeCategory": "screenUsageTime", + "appTimeData": operationData["appTimeData"] + } + }; + break; default: // If the operation is neither of above, it is a command operation operationType = operationTypeConstants["COMMAND"]; diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/js/android-policy-edit.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/js/android-policy-edit.js index 4aa6b0a8c..819c46ea9 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/js/android-policy-edit.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/js/android-policy-edit.js @@ -61,7 +61,9 @@ var androidOperationConstants = { "ENROLLMENT_APP_INSTALL_CODE": "ENROLLMENT_APP_INSTALL", "CERT_ADD_OPERATION_CODE": "INSTALL_CERT", "DISPLAY_MESSAGE_CONFIGURATION_OPERATION": "display-message-configuration", - "DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE": "DISPLAY_MESSAGE_CONFIGURATION" + "DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE": "DISPLAY_MESSAGE_CONFIGURATION", + "APP_USAGE_TIME_CONFIGURATION_OPERATION": "application-list", + "APP_USAGE_TIME_CONFIGURATION_OPERATION_CODE": "APPLICATION_LIST" }; /** @@ -665,7 +667,7 @@ var validatePolicyProfile = function () { } // Validating DISPLAY MESSAGE CONFIGURATION - if ($.inArray(androidOperationConstants["DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE"], configuredOperations) != -1) { + if ($.inArray(androidOperationConstants["DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE"], configuredOperations) !== -1) { // if DISPLAY_MESSAGE_CONFIGURATION policy is configured operation = androidOperationConstants["DISPLAY_MESSAGE_CONFIGURATION_OPERATION"]; // initializing continueToCheckNextInputs to true @@ -695,6 +697,262 @@ var validatePolicyProfile = function () { validationStatusArray.push(validationStatus); } + // Validating APP_USAGE_TIME_CONFIGURATION + if ($.inArray(androidOperationConstants["APP_USAGE_TIME_CONFIGURATION_OPERATION_CODE"], configuredOperations) !== -1) { + // if APP_USAGE_TIME_CONFIGURATION policy is configured + operation = androidOperationConstants["APP_USAGE_TIME_CONFIGURATION_OPERATION"]; + // initializing continueToCheckNextInputs to true + continueToCheckNextInputs = true; + + // var usageTimeType = $("#app-usage-time-category").val(); + var usageTimeApplicationsGridChildInputs = "div#app-usage-time .child-input"; + + // if (!usageTimeType) { + // validationStatus = { + // "error": true, + // "subErrorMsg": "App usage type is not provided.", + // "erroneousFeature": operation + // }; + // continueToCheckNextInputs = false; + // } + + if (continueToCheckNextInputs) { + if ($(usageTimeApplicationsGridChildInputs).length === 0) { + validationStatus = { + "error": true, + "subErrorMsg": "Applications are not provided in application list.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } else { + childInputCount = 0; + childInputArray = []; + emptyChildInputCount = 0; + inputs = 0; + + // Looping through each child input + $(usageTimeApplicationsGridChildInputs).each(function () { + childInputCount++; + + // If child input is of second column + childInput = $(this).val(); + childInputArray.push(childInput); + // Updating emptyChildInputCount + if (!childInput) { + // If child input field is empty + emptyChildInputCount++; + } + }); + + // Updating validationStatus + if (emptyChildInputCount > 0) { + // If empty child inputs are present + validationStatus = { + "error": true, + "subErrorMsg": "One or more package names of applications are empty.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + + } else { + allowTimeArray = []; + periodTimeArray = []; + + var appList = $("#app-usage-time").find(".child-input"); + var i = 0; + var loopcount = 1; + for (var j = 1; j < appList.length; j += i) { + if (loopcount % 2 !== 1) { + i = 3; + periodTimeArray.push($(appList[j]).val()); + } else { + i = 2; + allowTimeArray.push($(appList[j]).val()); + } + loopcount++; + } + result = periodTimeArray.map(function (item, i) { + return Number(item) >= Number(allowTimeArray[i]); + + }); + + for (var a = 0; a <= result.length; a++) { + if (result[a] === false) { + validationStatus = { + "error": true, + "subErrorMsg": "Allowed time type should be minimum or " + + "equal than period time.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + + //check the duplicate values for package name + var q = 0; + duplicateValue = []; + for (var k = 0; k < appList.length; k += q) { + + duplicateValue.push($(appList[k]).val()); + q = 5; + } + for (var b = 0; b <= duplicateValue.length; b++) { + for (var c = 0; c <= duplicateValue.length; c++) { + if (c !== b) { + if (String(duplicateValue[b]).valueOf() === + String(duplicateValue[c]).valueOf()) { + validationStatus = { + "error": true, + "subErrorMsg": "Duplicate values exist with " + + "for package names.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + } + } + + periodTimeValue = []; + allowTimeValue = []; + var checkNumber = 0; + var e = 1; + var timeCount = 1; + for (var d = 2; d < appList.length; d += e) { + if (timeCount % 2 !== 1) { + e = 3; + periodTimeValue.push($(appList[d]).val()); + } else { + e = 2; + allowTimeValue.push($(appList[d]).val()); + } + timeCount++; + } + + //check the limit of the time + allowTimeValueResult = allowTimeArray.map(function (item, i) { + if (Number(item) === 60) { + return Number(allowTimeValue[i]) < 60; + } else if (Number(item) === 3600) { + return Number(allowTimeValue[i]) < 24; + } else if (Number(item) === 86400) { + return Number(allowTimeValue[i]) < 7; + } else { + return Number(allowTimeValue[i]) < 4; + } + }); + + for (var a = 0; a <= allowTimeValueResult.length; a++) { + if (allowTimeValueResult[a] === false) { + validationStatus = { + "error": true, + "subErrorMsg": "Allow time values must be a number and " + + "the maximum values are " + + "(minutes = 59,hours = 23,day = 6," + + "week = 3,month = 1).", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + //check whether the value is a positive number and the integer number + for (var c = 0; c < allowTimeValue.length; c++) { + checkNumber = Number(allowTimeValue[c]); + if (Number.isInteger(checkNumber) === false || checkNumber <= 0) { + validationStatus = { + "error": true, + "subErrorMsg": "Allow time must be a integer and a " + + "positive number.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + + //check the limit of the time + periodValueResult = periodTimeArray.map(function (item, i) { + if (Number(item) === 60) { + return Number(periodTimeValue[i]) < 60; + } else if (Number(item) === 3600) { + return Number(periodTimeValue[i]) < 24; + } else if (Number(item) === 86400) { + return Number(periodTimeValue[i]) < 7; + } else if (Number(item) === 604800) { + return Number(periodTimeValue[i]) < 4; + } else { + return Number(periodTimeValue[i]) < 29; + } + }); + for (var a = 0; a <= periodValueResult.length; a++) { + if (periodValueResult[a] === false) { + validationStatus = { + "error": true, + "subErrorMsg": "Period time values must be a number and " + + "the maximum values are " + + "(minutes = 59,hours = 23,day = 6," + + "week = 3) and can select 1 to 28 days for the month .", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + //check whether the value is a positive number and the integer number + for (var c = 0; c < periodTimeValue.length; c++) { + checkNumber = Number(periodTimeValue[c]); + if (Number.isInteger(checkNumber) === false || checkNumber <= 0) { + validationStatus = { + "error": true, + "subErrorMsg": "Period time must be a integer and a " + + "positive number.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + + //check the period time value is greater than allow time value when the + // both have the same time type + var checkValueResult = []; + + typeResult = periodTimeArray.map(function (item, i) { + return Number(item) === Number(allowTimeArray[i]); + }); + for (var x = 0; x <= typeResult.length; x++) { + if (typeResult[x] === true) { + checkValueResult = periodTimeValue.map(function (item, i) { + return Number(item) < Number(allowTimeValue[i]); + }); + } + } + for (var r = 0; r <= checkValueResult.length; r++) { + if (checkValueResult[r] === true) { + validationStatus = { + "error": true, + "subErrorMsg": "Allowed time value should be minimum or " + + "equal than period time value when both have " + + "the same time type.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + } + } + } + + // at-last, if the value of continueToCheckNextInputs is still true + // this means that no error is found + if (continueToCheckNextInputs) { + validationStatus = { + "error": false, + "okFeature": operation + }; + } + + // updating validationStatusArray with validationStatus + validationStatusArray.push(validationStatus); + } + // Validating PROXY if ($.inArray(androidOperationConstants["GLOBAL_PROXY_OPERATION_CODE"], configuredOperations) !== -1) { // if PROXY is configured @@ -1135,6 +1393,81 @@ var changeAndroidWifiPolicyEAP = function (select, superSelect) { } }; +//This function will display apps allowed and period time as a sentence +function onCreateSentence() { + childInputCount = 0; + childInputArray = []; + var usageTimeApplicationsGridChildInputs = "div#app-usage-time .child-input"; + $(usageTimeApplicationsGridChildInputs).each(function () { + childInputCount++; + var childInput = $(this).val(); + childInputArray.push(childInput); + }); + if(childInputArray.length !== 0) { + var allowType = null, periodType = null, allowTimeType, periodTimeType; + var packageName = childInputArray[(childInputArray.length-5)]; + var allowTime = childInputArray[(childInputArray.length-3)]; + var periodTime = childInputArray[(childInputArray.length-1)]; + var convertAllowTimeType = childInputArray[(childInputArray.length-4)]; + var convertPeriodTimeType = childInputArray[(childInputArray.length-2)]; + + switch (convertAllowTimeType) { + case "60": + allowType = "minute"; + break; + case "3600": + allowType = "hour"; + break; + case "86400": + allowType = "day"; + break; + case "604800": + allowType = "week"; + } + if (allowTime > 1) { + allowTimeType = (allowType + "s"); + } else { + allowTimeType = allowType; + } + + switch (convertPeriodTimeType) { + case "60": + periodType = "minute"; + break; + case "3600": + periodType = "hour"; + break; + case "86400": + periodType = "day"; + break; + case "604800": + periodType = "week"; + break; + case "2592000": + periodType = "month"; + } + if (periodType !== "month") { + if (periodTime > 1) { + periodTimeType = (periodType + "s"); + } else { + periodTimeType = periodType; + } + if (packageName != null) { + document.getElementById("demoSentence").innerHTML = "" + packageName + "" + " package can be use for " + "" + + allowTime + "" + " " + "" + allowTimeType + "" + " with in " + + "" + periodTime + "" + " " + "" + periodTimeType + "" + " period."; + } + } else { + periodTimeType = periodType; + if (packageName != null) { + document.getElementById("demoSentence").innerHTML = "" + packageName + "" + " package can be use for " + "" + + allowTime + "" + " " + "" + allowTimeType + "" + " and the apps usage is calculated on " + + "" + periodTime + "" + " th of every " + "" + periodTimeType + "" + "."; + } + } + } +} + /** * Pass a div Id and a check box to view or hide div content based on checkbox value */ diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/templates/android-policy-edit.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/templates/android-policy-edit.hbs index bd568a727..7597b98b0 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/templates/android-policy-edit.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-edit/public/templates/android-policy-edit.hbs @@ -174,6 +174,17 @@ + + + + + App Usage Time Configuration + + + + +
@@ -3428,6 +3439,158 @@
+ +
+
+ +
+
+
+
+
    + + This policy works only for Android 5.1 (Lolipop) or later versions. +
+

+
+ +{{!--
--}} +{{!--
--}} +{{!--
--}} +{{!-- --}} +{{!-- --}} +{{!--
--}} +{{!--
--}} +{{!--
--}} +
+ +
+ + + + + + Add Application + +
+ + + + + + + + + + + + + + + + + +
No:Package NameAllowed Time TypeAllowed TimePeriod Time TypePeriod Time
+ No entries added yet . +
+ + + + + + + + + + + + + +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-view/public/templates/android-policy-view.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-view/public/templates/android-policy-view.hbs index 71cd6df7a..9726c0068 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-view/public/templates/android-policy-view.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-view/public/templates/android-policy-view.hbs @@ -156,6 +156,17 @@ + + + + + App Usage Time Configuration + + + + +
@@ -3341,6 +3352,156 @@
+ +
+
+ +
+
+
+
+
    + + This policy works only for Android 5.1 (Lolipop) or later versions. +
+

+
+ +{{!--
--}} +{{!--
--}} +{{!--
--}} +{{!-- --}} +{{!-- --}} +{{!--
--}} +{{!--
--}} +{{!--
--}} +
+ +
+ +
+ + + + + + + + + + + + + + + + + +
No:Package NameAllowed Time TypeAllowed TimePeriod Time TypePeriod Time
+ No entries added yet . +
+ + + + + + + + + + + + + +
+
+
+
+
+ + diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/js/android-policy-operations.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/js/android-policy-operations.js index 312f56704..0d565e526 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/js/android-policy-operations.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/js/android-policy-operations.js @@ -58,7 +58,9 @@ var androidOperationConstants = { "ENROLLMENT_APP_INSTALL_CODE": "ENROLLMENT_APP_INSTALL", "CERTIFICATE_INSTALL": "INSTALL_CERT", "DISPLAY_MESSAGE_CONFIGURATION_OPERATION": "display-message-configuration", - "DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE": "DISPLAY_MESSAGE_CONFIGURATION" + "DISPLAY_MESSAGE_CONFIGURATION_OPERATION_CODE": "DISPLAY_MESSAGE_CONFIGURATION", + "APP_USAGE_TIME_CONFIGURATION_OPERATION": "application-list", + "APP_USAGE_TIME_CONFIGURATION_OPERATION_CODE": "APPLICATION_LIST" }; /** @@ -626,6 +628,262 @@ var validatePolicyProfile = function () { validationStatusArray.push(validationStatus); } + // Validating APP_USAGE_TIME_CONFIGURATION + if ($.inArray(androidOperationConstants["APP_USAGE_TIME_CONFIGURATION_OPERATION_CODE"], configuredOperations) !== -1) { + // if APP_USAGE_TIME_CONFIGURATION policy is configured + operation = androidOperationConstants["APP_USAGE_TIME_CONFIGURATION_OPERATION"]; + // initializing continueToCheckNextInputs to true + continueToCheckNextInputs = true; + + // var usageTimeType = $("#app-usage-time-category").val(); + var usageTimeApplicationsGridChildInputs = "div#app-usage-time .child-input"; + + // if (!usageTimeType) { + // validationStatus = { + // "error": true, + // "subErrorMsg": "App usage type is not provided.", + // "erroneousFeature": operation + // }; + // continueToCheckNextInputs = false; + // } + + if (continueToCheckNextInputs) { + if ($(usageTimeApplicationsGridChildInputs).length === 0) { + validationStatus = { + "error": true, + "subErrorMsg": "Applications are not provided in application list.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } else { + childInputCount = 0; + childInputArray = []; + emptyChildInputCount = 0; + inputs = 0; + + // Looping through each child input + $(usageTimeApplicationsGridChildInputs).each(function () { + childInputCount++; + + // If child input is of second column + childInput = $(this).val(); + childInputArray.push(childInput); + // Updating emptyChildInputCount + if (!childInput) { + // If child input field is empty + emptyChildInputCount++; + } + }); + + // Updating validationStatus + if (emptyChildInputCount > 0) { + // If empty child inputs are present + validationStatus = { + "error": true, + "subErrorMsg": "One or more package names of applications are empty.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + + } else { + allowTimeArray = []; + periodTimeArray = []; + + var appList = $("#app-usage-time").find(".child-input"); + var i = 0; + var loopcount = 1; + for (var j = 1; j < appList.length; j += i) { + if (loopcount % 2 !== 1) { + i = 3; + periodTimeArray.push($(appList[j]).val()); + } else { + i = 2; + allowTimeArray.push($(appList[j]).val()); + } + loopcount++; + } + result = periodTimeArray.map(function (item, i) { + return Number(item) >= Number(allowTimeArray[i]); + + }); + + for (var a = 0; a <= result.length; a++) { + if (result[a] === false) { + validationStatus = { + "error": true, + "subErrorMsg": "Allowed time type should be minimum or " + + "equal than period time.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + + //check the duplicate values for package name + var q = 0; + duplicateValue = []; + for (var k = 0; k < appList.length; k += q) { + + duplicateValue.push($(appList[k]).val()); + q = 5; + } + for (var b = 0; b <= duplicateValue.length; b++) { + for (var c = 0; c <= duplicateValue.length; c++) { + if (c !== b) { + if (String(duplicateValue[b]).valueOf() === + String(duplicateValue[c]).valueOf()) { + validationStatus = { + "error": true, + "subErrorMsg": "Duplicate values exist with " + + "for package names.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + } + } + + periodTimeValue = []; + allowTimeValue = []; + var checkNumber = 0; + var e = 1; + var timeCount = 1; + for (var d = 2; d < appList.length; d += e) { + if (timeCount % 2 !== 1) { + e = 3; + periodTimeValue.push($(appList[d]).val()); + } else { + e = 2; + allowTimeValue.push($(appList[d]).val()); + } + timeCount++; + } + + //check the limit of the allow time + allowTimeValueResult = allowTimeArray.map(function (item, i) { + if (Number(item) === 60) { + return Number(allowTimeValue[i]) < 60; + } else if (Number(item) === 3600) { + return Number(allowTimeValue[i]) < 24; + } else if (Number(item) === 86400) { + return Number(allowTimeValue[i]) < 7; + } else { + return Number(allowTimeValue[i]) < 4; + } + }); + + for (var a = 0; a <= allowTimeValueResult.length; a++) { + if (allowTimeValueResult[a] === false) { + validationStatus = { + "error": true, + "subErrorMsg": "Allow time values must be a number and " + + "the maximum values are " + + "(minutes = 59,hours = 23,day = 6," + + "week = 3).", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + //check whether the value is a positive number and the integer number + for (var c = 0; c < allowTimeValue.length; c++) { + checkNumber = Number(allowTimeValue[c]); + if (Number.isInteger(checkNumber) === false || checkNumber <= 0) { + validationStatus = { + "error": true, + "subErrorMsg": "Allow time must be a integer and a " + + "positive number.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + + //check the limit of the period time + periodValueResult = periodTimeArray.map(function (item, i) { + if (Number(item) === 60) { + return Number(periodTimeValue[i]) < 60; + } else if (Number(item) === 3600) { + return Number(periodTimeValue[i]) < 24; + } else if (Number(item) === 86400) { + return Number(periodTimeValue[i]) < 7; + } else if (Number(item) === 604800) { + return Number(periodTimeValue[i]) < 4; + } else { + return Number(periodTimeValue[i]) < 29; + } + }); + for (var a = 0; a <= periodValueResult.length; a++) { + if (periodValueResult[a] === false) { + validationStatus = { + "error": true, + "subErrorMsg": "Period time values must be a number and " + + "the maximum values are " + + "(minutes = 59,hours = 23,day = 6," + + "week = 3) and can select 1 to 28 days for the month .", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + //check whether the value is a positive number and the integer number + for (var c = 0; c < periodTimeValue.length; c++) { + checkNumber = Number(periodTimeValue[c]); + if (Number.isInteger(checkNumber) === false || checkNumber <= 0) { + validationStatus = { + "error": true, + "subErrorMsg": "Period time must be a integer and a " + + "positive number.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + + //check the period time value is greater than allow time value when the + // both have the same time type + var checkValueResult = []; + + typeResult = periodTimeArray.map(function (item, i) { + return Number(item) === Number(allowTimeArray[i]); + }); + for (var x = 0; x <= typeResult.length; x++) { + if (typeResult[x] === true) { + checkValueResult = periodTimeValue.map(function (item, i) { + return Number(item) < Number(allowTimeValue[i]); + }); + } + } + for (var r = 0; r <= checkValueResult.length; r++) { + if (checkValueResult[r] === true) { + validationStatus = { + "error": true, + "subErrorMsg": "Allowed time value should be minimum or " + + "equal than period time value when both have " + + "the same time type.", + "erroneousFeature": operation + }; + continueToCheckNextInputs = false; + } + } + } + } + } + + // at-last, if the value of continueToCheckNextInputs is still true + // this means that no error is found + if (continueToCheckNextInputs) { + validationStatus = { + "error": false, + "okFeature": operation + }; + } + + // updating validationStatusArray with validationStatus + validationStatusArray.push(validationStatus); + } + // Validating PROXY if ($.inArray(androidOperationConstants["GLOBAL_PROXY_OPERATION_CODE"], configuredOperations) !== -1) { // if PROXY is configured @@ -1108,6 +1366,81 @@ var changeAndroidWifiPolicyEAP = function (select, superSelect) { } }; +//This function will display apps allowed and period time as a sentence +function onCreateSentence() { + childInputCount = 0; + childInputArray = []; + var usageTimeApplicationsGridChildInputs = "div#app-usage-time .child-input"; + $(usageTimeApplicationsGridChildInputs).each(function () { + childInputCount++; + var childInput = $(this).val(); + childInputArray.push(childInput); + }); + if(childInputArray.length !== 0) { + var allowType = null, periodType = null, allowTimeType, periodTimeType; + var packageName = childInputArray[(childInputArray.length-5)]; + var allowTime = childInputArray[(childInputArray.length-3)]; + var periodTime = childInputArray[(childInputArray.length-1)]; + var convertAllowTimeType = childInputArray[(childInputArray.length-4)]; + var convertPeriodTimeType = childInputArray[(childInputArray.length-2)]; + + switch (convertAllowTimeType) { + case "60": + allowType = "minute"; + break; + case "3600": + allowType = "hour"; + break; + case "86400": + allowType = "day"; + break; + case "604800": + allowType = "week"; + } + if (allowTime > 1) { + allowTimeType = (allowType + "s"); + } else { + allowTimeType = allowType; + } + + switch (convertPeriodTimeType) { + case "60": + periodType = "minute"; + break; + case "3600": + periodType = "hour"; + break; + case "86400": + periodType = "day"; + break; + case "604800": + periodType = "week"; + break; + case "2592000": + periodType = "month"; + } + if (periodType !== "month") { + if (periodTime > 1) { + periodTimeType = (periodType + "s"); + } else { + periodTimeType = periodType; + } + if (packageName != null) { + document.getElementById("demoSentence").innerHTML = "" + packageName + "" + " package can be use for " + "" + + allowTime + "" + " " + "" + allowTimeType + "" + " with in " + + "" + periodTime + "" + " " + "" + periodTimeType + "" + " period."; + } + } else { + periodTimeType = periodType; + if (packageName != null) { + document.getElementById("demoSentence").innerHTML = "" + packageName + "" + " package can be use for " + "" + + allowTime + "" + " " + "" + allowTimeType + "" + " and the apps usage is calculated on " + + "" + periodTime + "" + " th of every " + "" + periodTimeType + "" + "."; + } + } + } +} + /** * Pass a div Id and a check box to view or hide div content based on checkbox value */ diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs index 033a82580..fc219374d 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs @@ -182,6 +182,17 @@ + + + + + App Usage Time Configuration + + + + +
@@ -3444,6 +3455,159 @@
+ + +
+
+ +
+
+
+
+
    + + This policy works only for Android 5.1 (Lolipop) or later versions. +
+

+
+ +{{!--
--}} +{{!--
--}} +{{!--
--}} +{{!-- --}} +{{!-- --}} +{{!--
--}} +{{!--
--}} +{{!--
--}} +
+ +
+ + + + + + Add Application + +
+ + + + + + + + + + + + + + + + + +
No:Package NameAllowed Time TypeAllowed TimePeriod Time TypePeriod Time
+ No entries added yet . +
+ + + + + + + + + + + + + +
+
+
+
+
+
+
+ +