mirror of
https://repository.entgra.net/community/device-mgt-plugins.git
synced 2025-09-16 23:42:15 +00:00
Merge branch 'master' of https://github.com/wso2/carbon-device-mgt-plugins into devicetype-3.1.0
This commit is contained in:
commit
dc3420cadb
@ -24,15 +24,38 @@
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-thumbnail"}}
|
||||
<img src="{{@unit.publicUri}}/images/respberry-icon.png"/>
|
||||
<img src="{{@unit.publicUri}}/images/respberry-icon.png" class="img-responsive"/>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details-header"}}
|
||||
<h1 class="device-id"
|
||||
data-deviceid="{{device.deviceIdentifier}}"
|
||||
data-type="{{device.type}}"
|
||||
data-ownership="{{device.ownership}}"
|
||||
data-owner="{{device.owner}}">
|
||||
{{device.enrolmentInfo.owner}}'s {{device.name}}
|
||||
<a id="device-info-tooltip" href="#" data-toggle="tooltip" title="Device Identifier: {{device.deviceIdentifier}}">
|
||||
<i class="fw fw-info"></i>
|
||||
</a>
|
||||
</h1>
|
||||
<h4>Ownership - <strong>{{device.enrolmentInfo.ownership}}</strong></h4>
|
||||
<h4>Device is
|
||||
<strong>
|
||||
{{#equal device.enrolmentInfo.status "ACTIVE"}}Active{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "INACTIVE"}}Inactive{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "BLOCKED"}}Blocked{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "REMOVED"}}Removed{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "UNREACHABLE"}}Unreachable{{/equal}}
|
||||
</strong>
|
||||
</h4>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-opetations"}}
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
||||
Operations
|
||||
</div>
|
||||
<div class="add-margin-top-4x">
|
||||
{{unit "cdmf.unit.device.operation-bar" device=device autoCompleteParams=autoCompleteParams
|
||||
<div class="operation-container">
|
||||
<div class="operation-title">
|
||||
<h4>Device Operations</h4>
|
||||
</div>
|
||||
{{unit "cdmf.unit.device.operation-bar" device=device autoCompleteParams=autoCompleteParams
|
||||
encodedFeaturePayloads=encodedFeaturePayloads}}
|
||||
</div>
|
||||
{{/zone}}
|
||||
@ -42,10 +65,6 @@
|
||||
data-toggle="tab" aria-controls="device_statistics">Device
|
||||
Statistics</a>
|
||||
</li>
|
||||
<li><a class="list-group-item" href="#event_log" role="tab" data-toggle="tab"
|
||||
aria-controls="event_log">Operations Log</a></li>
|
||||
<li><a class="list-group-item" href="#geo_dashboard" role="tab" data-toggle="tab"
|
||||
aria-controls="geo_dashboard">Map</a></li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-view-tab-contents"}}
|
||||
@ -54,43 +73,4 @@
|
||||
<div class="panel-heading">Device Statistics</div>
|
||||
{{unit "cdmf.unit.device.type.raspberrypi.realtime.analytics-view" device=device}}
|
||||
</div>
|
||||
<div class="panel panel-default tab-pane" id="event_log" role="tabpanel"
|
||||
aria-labelledby="event_log">
|
||||
<div class="panel-heading">Operations Log <span><a href="#"
|
||||
id="refresh-operations"><i
|
||||
class="fw fw-refresh"></i></a></span></div>
|
||||
<div class="panel-body">
|
||||
<div id="operations-spinner" class="wr-advance-operations-init hidden">
|
||||
<br>
|
||||
|
||||
<i class="fw fw-settings fw-spin fw-2x"></i>
|
||||
|
||||
Loading Operations Log . . .
|
||||
<br>
|
||||
<br>
|
||||
</div>
|
||||
<div id="operations-log-container">
|
||||
<div class="panel-body">
|
||||
Not available yet
|
||||
</div>
|
||||
<br class="c-both"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default tab-pane"
|
||||
id="geo_dashboard" role="tabpanel" aria-labelledby="geo_dashboard">
|
||||
<div class="panel-heading">Map</div>
|
||||
|
||||
<div id="chartWrapper">
|
||||
</div>
|
||||
|
||||
<a class="padding-left"
|
||||
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{anchor}}">
|
||||
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Location
|
||||
</a>
|
||||
</div>
|
||||
{{/zone}}
|
||||
@ -24,16 +24,39 @@
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-thumbnail"}}
|
||||
<img src="{{@unit.publicUri}}/images/firealarm-icon.png"/>
|
||||
<img src="{{@unit.publicUri}}/images/firealarm-icon.png" class="img-responsive"/>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details-header"}}
|
||||
<h1 class="device-id"
|
||||
data-deviceid="{{device.deviceIdentifier}}"
|
||||
data-type="{{device.type}}"
|
||||
data-ownership="{{device.ownership}}"
|
||||
data-owner="{{device.owner}}">
|
||||
{{device.enrolmentInfo.owner}}'s {{device.name}}
|
||||
<a id="device-info-tooltip" href="#" data-toggle="tooltip" title="Device Identifier: {{device.deviceIdentifier}}">
|
||||
<i class="fw fw-info"></i>
|
||||
</a>
|
||||
</h1>
|
||||
<h4>Ownership - <strong>{{device.enrolmentInfo.ownership}}</strong></h4>
|
||||
<h4>Device is
|
||||
<strong>
|
||||
{{#equal device.enrolmentInfo.status "ACTIVE"}}Active{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "INACTIVE"}}Inactive{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "BLOCKED"}}Blocked{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "REMOVED"}}Removed{{/equal}}
|
||||
{{#equal device.enrolmentInfo.status "UNREACHABLE"}}Unreachable{{/equal}}
|
||||
</strong>
|
||||
</h4>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-opetations"}}
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
||||
Operations
|
||||
</div>
|
||||
<div class="add-margin-top-4x">
|
||||
{{unit "cdmf.unit.device.operation-bar" device=device autoCompleteParams=autoCompleteParams
|
||||
encodedFeaturePayloads=encodedFeaturePayloads}}
|
||||
<div class="operation-container">
|
||||
<div class="operation-title">
|
||||
<h4>Device Operations</h4>
|
||||
</div>
|
||||
{{unit "cdmf.unit.device.operation-bar" device=device autoCompleteParams=autoCompleteParams
|
||||
encodedFeaturePayloads=encodedFeaturePayloads}}
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2017, 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
|
||||
~
|
||||
~ 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
|
||||
~ specific language governing permissions and limitations
|
||||
~ under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>android-plugin</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<version>4.0.5-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.mgt.mobile.android.emulator</artifactId>
|
||||
<name>AndroidTryIt Emulator</name>
|
||||
<description>Android Virtual Device</description>
|
||||
|
||||
<build>
|
||||
<finalName>EmulatorJava</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<!-- Build an executable JAR -->
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
<mainClass>org.carbon.android.emulator.TryIt</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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
|
||||
*
|
||||
* 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
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.carbon.android.emulator;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* This class has the constant strings used and the system properties.
|
||||
*/
|
||||
class Constants {
|
||||
static final String OS_NAME_PROPERTY = "os.name";
|
||||
static final String USER_HOME_PROPERTY = "user.home";
|
||||
static final String USER_DIRECTORY_PROPERTY = "user.dir";
|
||||
static final String MAC_OS = "macosx";
|
||||
static final String MAC = "mac";
|
||||
static final String WINDOWS_OS = "windows";
|
||||
static final String WINDOWS_EXTENSION_EXE = ".exe";
|
||||
static final String WINDOWS_EXTENSION_BAT = ".bat";
|
||||
static final String MAC_HAXM_EXTENSION = ".sh";
|
||||
static final String MAC_DARWIN = "darwin";
|
||||
// System properties
|
||||
static final String SDK_TOOLS_URL = "sdk.tools.url";
|
||||
static final String PLATFORM_TOOLS_URL = "platform.tools.url";
|
||||
static final String BUILD_TOOL_URL = "build.tools.url";
|
||||
static final String PLATFORM_URL = "platform.url";
|
||||
static final String SYSTEM_IMAGE_URL = "sys.img.url";
|
||||
static final String HAXM_URL = "haxm.url";
|
||||
static final String DOWNLOADED_BUILD_TOOL_NAME = "downloaded.build.tool.name";
|
||||
static final String BUILD_TOOLS_VERSION = "build.tool.version";
|
||||
static final String DOWNLOADED_PLATFORM_NAME = "downloaded.platform.name";
|
||||
static final String TARGET_VERSION = "target.version";
|
||||
static final String OS_TARGET = "os.target";
|
||||
// WSO2 AVD specific variables
|
||||
static final String WSO2_AVD_NAME = "WSO2_AVD";
|
||||
static final String APK_LOCATION = File.separator + "resources" + File.separator + "android-agent.apk";
|
||||
static final String WSO2_CONFIG_LOCATION = File.separator + "resources" + File.separator + "config.ini";
|
||||
}
|
||||
@ -0,0 +1,886 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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
|
||||
*
|
||||
* 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
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.carbon.android.emulator;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Scanner;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
/**
|
||||
* This class creates an Android TryIt Emulator to be used as virtual device to connect to WSO2 IOT Cloud
|
||||
* or Product-iot.
|
||||
*/
|
||||
public class TryIt {
|
||||
private String osSuffix;
|
||||
private String androidSdkHome;
|
||||
private String userHome;
|
||||
private String workingDirectory;
|
||||
private String adbLocation; // location of executable file abd
|
||||
private String emulatorLocation; // location of executable file emulator
|
||||
private File sdkConfigFile; // file in which SDK location is written
|
||||
|
||||
/**
|
||||
* This method gets the system specific variables.
|
||||
*/
|
||||
private TryIt() {
|
||||
osSuffix = System.getProperty(Constants.OS_NAME_PROPERTY);
|
||||
if (osSuffix == null) {
|
||||
sysPropertyError(Constants.OS_NAME_PROPERTY, "OS Name");
|
||||
} else {
|
||||
osSuffix = osSuffix.toLowerCase();
|
||||
}
|
||||
userHome = System.getProperty(Constants.USER_HOME_PROPERTY);
|
||||
if (userHome == null) {
|
||||
sysPropertyError(Constants.USER_HOME_PROPERTY, "Home Directory");
|
||||
}
|
||||
workingDirectory = System.getProperty(Constants.USER_DIRECTORY_PROPERTY);
|
||||
if (workingDirectory == null) {
|
||||
sysPropertyError(Constants.USER_DIRECTORY_PROPERTY, "Current Working Directory");
|
||||
}
|
||||
if (osSuffix.contains(Constants.WINDOWS_OS)) {
|
||||
osSuffix = Constants.WINDOWS_OS;
|
||||
}
|
||||
if (osSuffix.contains(Constants.MAC)) {
|
||||
osSuffix = Constants.MAC_OS;
|
||||
}
|
||||
System.out.println("Detected OS " + osSuffix);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method creates an android virtual device.
|
||||
*
|
||||
* @param args commandline arguments.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
TryIt tryIt = new TryIt();
|
||||
tryIt.setAndroidSDK();
|
||||
tryIt.checkBuildTools();
|
||||
tryIt.startAVD();
|
||||
tryIt.checkEmulatorBoot();
|
||||
String[] agents = tryIt.checkForAgent();
|
||||
System.out.println("Starting Agent ...");
|
||||
tryIt.startPackage(agents);
|
||||
ProcessBuilder startShellProcessBuilder = new ProcessBuilder(tryIt.adbLocation, "shell");
|
||||
try {
|
||||
startShellProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
|
||||
startShellProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
|
||||
Process startShell = startShellProcessBuilder.start();
|
||||
System.out.println("Connected to device shell");
|
||||
startShell.waitFor();
|
||||
} catch (IOException e) {
|
||||
tryIt.handleException("Unable to start the shell", e);
|
||||
} catch (InterruptedException ignored) {
|
||||
//
|
||||
}
|
||||
System.out.println("\nGood Bye!");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method downloads the artifacts from remote url.
|
||||
*
|
||||
* @param remotePath - remote url
|
||||
* @param localPath - local path to download
|
||||
*/
|
||||
private void downloadArtifacts(String remotePath, String localPath) {
|
||||
BufferedInputStream in = null;
|
||||
FileOutputStream out = null;
|
||||
long startingTime = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
URL url = new URL(remotePath);
|
||||
URLConnection conn = url.openConnection();
|
||||
int size = conn.getContentLength();
|
||||
in = new BufferedInputStream(url.openStream());
|
||||
out = new FileOutputStream(localPath);
|
||||
byte data[] = new byte[1024];
|
||||
int count;
|
||||
double sumCount = 0.0;
|
||||
|
||||
while ((count = in.read(data, 0, 1024)) != -1) {
|
||||
out.write(data, 0, count);
|
||||
sumCount += count;
|
||||
if ((size > 0 && (System.currentTimeMillis() - startingTime > 5000))
|
||||
|| (sumCount / size * 100.0) == 100) {
|
||||
System.out.println("Downloading: "
|
||||
+ new DecimalFormat("#.##").format((sumCount / size * 100.0)) + " %");
|
||||
startingTime = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
System.out.println("Error in download URL of " + localPath);
|
||||
System.out.println("URL provided " + remotePath);
|
||||
} catch (IOException e) {
|
||||
if (!new File(localPath).delete()) {
|
||||
System.out.println("Delete " + localPath + " and try again");
|
||||
}
|
||||
handleException("Downloading " + localPath + " failed.", e);
|
||||
} finally {
|
||||
if (in != null)
|
||||
try {
|
||||
in.close();
|
||||
} catch (IOException ignored) {
|
||||
//
|
||||
}
|
||||
if (out != null)
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException ignored) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when then is an error in getting system properties
|
||||
*
|
||||
* @param property -property type
|
||||
* @param hint - property name
|
||||
*/
|
||||
private void sysPropertyError(String property, String hint) {
|
||||
System.out.println("Unable to get the " + property + " property of your system (" + hint + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method validates the Android SDK location provided by the user and write it to the file
|
||||
* sdkConfigFile.
|
||||
*/
|
||||
private void setSDKPath() {
|
||||
System.out.println("Please provide android SDK location : ");
|
||||
String response = new Scanner(System.in, StandardCharsets.UTF_8.toString()).next();
|
||||
String emulatorLocationPath = response + File.separator + "tools" + File.separator + "emulator";
|
||||
if (osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
emulatorLocationPath += Constants.WINDOWS_EXTENSION_BAT;
|
||||
}
|
||||
if (new File(emulatorLocationPath).exists()) {
|
||||
androidSdkHome = response;
|
||||
writeToSdkConfigFile(response);
|
||||
} else {
|
||||
System.out.println("Invalid SDK location");
|
||||
setSDKPath();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method writes the SDK location to a file sdkConfigFile for future use.
|
||||
*
|
||||
* @param string - SDK location.
|
||||
*/
|
||||
private void writeToSdkConfigFile(String string) {
|
||||
Writer writer = null;
|
||||
try {
|
||||
writer = new OutputStreamWriter(new FileOutputStream(sdkConfigFile), StandardCharsets.UTF_8);
|
||||
writer.write(string);
|
||||
} catch (IOException e) {
|
||||
System.out.println("Writing to " + sdkConfigFile.toString() + " failed.");
|
||||
} finally {
|
||||
try {
|
||||
if (writer != null) {
|
||||
writer.close();
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method creates a folder named android-sdk and downloads the minimum tools for SDK
|
||||
* and write the sdk-location to the file sdkConfigFile.
|
||||
*/
|
||||
private void getAndroidSDK() {
|
||||
String androidSdkFolderName = "android-sdk";
|
||||
if (!new File(workingDirectory + File.separator + androidSdkFolderName).exists()) {
|
||||
if (!new File(workingDirectory + File.separator + androidSdkFolderName).mkdir()) {
|
||||
System.out.println("Unable to make folder named " + androidSdkFolderName + " in " + workingDirectory);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
androidSdkHome = workingDirectory + File.separator + androidSdkFolderName;
|
||||
getTools(System.getProperty(Constants.SDK_TOOLS_URL), "_Android-sdk-tools.zip");
|
||||
getTools(System.getProperty(Constants.PLATFORM_TOOLS_URL), "_Android-platform-tools.zip");
|
||||
writeToSdkConfigFile(androidSdkHome);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method downloads and extracts the tools.
|
||||
*
|
||||
* @param url - the URL to download from.
|
||||
* @param folderName - the folder name where to download.
|
||||
*/
|
||||
private void getTools(String url, String folderName) {
|
||||
System.out.println("Downloading " + folderName);
|
||||
downloadArtifacts(url, androidSdkHome + File.separator + folderName);
|
||||
System.out.println("Configuring " + folderName);
|
||||
extractFolder(androidSdkHome + File.separator + folderName);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method starts the AVD specified by the user.
|
||||
*/
|
||||
private void startAVD() {
|
||||
String wso2AvdLocation = userHome + File.separator + ".android" + File.separator + "avd" + File.separator
|
||||
+ Constants.WSO2_AVD_NAME + ".avd";
|
||||
checkForPlatform();
|
||||
checkForSystemImages();
|
||||
if (!new File(wso2AvdLocation).isDirectory()) {
|
||||
Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
|
||||
System.out.print("Do you want to create WSO2_AVD with default configs (Y/n)?: ");
|
||||
if (read.next().toLowerCase().matches("y")) {
|
||||
createAVD();
|
||||
return;
|
||||
}
|
||||
}
|
||||
System.out.println("+----------------------------------------------------------------+");
|
||||
System.out.println("| WSO2 Android TryIt |");
|
||||
System.out.println("+----------------------------------------------------------------+");
|
||||
|
||||
emulatorLocation = androidSdkHome + File.separator + "tools" + File.separator + "emulator";
|
||||
if (osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
emulatorLocation += Constants.WINDOWS_EXTENSION_EXE;
|
||||
}
|
||||
setExecutePermission(emulatorLocation);
|
||||
listAVDs();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets the available AVDs' name from the system.
|
||||
*/
|
||||
private void listAVDs() {
|
||||
ArrayList<String> devices = new ArrayList<>();
|
||||
BufferedReader reader = null;
|
||||
try {
|
||||
ProcessBuilder listAVDsProcessBuilder = new ProcessBuilder(emulatorLocation, "-list-avds");
|
||||
Process listAVDsProcess = listAVDsProcessBuilder.start();
|
||||
reader = new BufferedReader(new InputStreamReader(listAVDsProcess.getInputStream(),
|
||||
StandardCharsets.UTF_8.toString()));
|
||||
String readLine;
|
||||
while ((readLine = reader.readLine()) != null) {
|
||||
devices.add(readLine);
|
||||
}
|
||||
selectAVD(devices);
|
||||
} catch (IOException e) {
|
||||
handleException("Unable to list the available AVDs", e);
|
||||
} finally {
|
||||
try {
|
||||
if (reader != null) {
|
||||
reader.close();
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
// exception in finally block
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method makes the thread wait.
|
||||
*
|
||||
* @param milliSec -time to wait for
|
||||
*/
|
||||
private void delay(long milliSec) {
|
||||
try {
|
||||
Thread.sleep(milliSec);
|
||||
} catch (InterruptedException ignored) {
|
||||
// interruption in main thread
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method enables the user to select an AVD form available AVDs.
|
||||
*
|
||||
* @param devices - list of available AVDs.
|
||||
*/
|
||||
private void selectAVD(ArrayList<String> devices) {
|
||||
if (devices.size() == 0) {
|
||||
System.out.println("No AVDs available in the system ");
|
||||
startAVD();
|
||||
} else if (devices.size() == 1) {
|
||||
runEmulator(devices.get(0));
|
||||
} else {
|
||||
System.out.println("\nAvailable AVDs in the system\n");
|
||||
int count = 1;
|
||||
for (String device : devices) {
|
||||
System.out.println(count + ") " + device);
|
||||
count++;
|
||||
}
|
||||
System.out.print("\nEnter AVD number to start (eg: 1) :");
|
||||
Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
|
||||
int avdNo = read.nextInt();
|
||||
runEmulator(devices.get(--avdNo));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method creates WSO2_AVD with the specific configurations.
|
||||
*/
|
||||
private void createAVD() {
|
||||
String avdManagerPath = androidSdkHome + File.separator + "tools" + File.separator + "bin"
|
||||
+ File.separator + "avdmanager";
|
||||
String androidPath = androidSdkHome + File.separator + "tools" + File.separator + "android";
|
||||
if (osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
avdManagerPath += Constants.WINDOWS_EXTENSION_BAT;
|
||||
androidPath += Constants.WINDOWS_EXTENSION_BAT;
|
||||
}
|
||||
setExecutePermission(androidPath);
|
||||
System.out.println("Creating a new AVD device");
|
||||
try {
|
||||
if (new File(avdManagerPath).exists()) {
|
||||
setExecutePermission(avdManagerPath);
|
||||
ProcessBuilder createAvdProcessBuilder = new ProcessBuilder(avdManagerPath, "create", "avd", "-k",
|
||||
"system-images;android-23;default;x86", "-n", Constants.WSO2_AVD_NAME);
|
||||
createAvdProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
|
||||
createAvdProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
|
||||
Process createAvdProcess = createAvdProcessBuilder.start();
|
||||
createAvdProcess.waitFor();
|
||||
} else {
|
||||
ProcessBuilder createAvd = new ProcessBuilder(androidPath, "create", "avd", "-n",
|
||||
Constants.WSO2_AVD_NAME, "-t", "android-23");
|
||||
createAvd.redirectInput(ProcessBuilder.Redirect.INHERIT);
|
||||
createAvd.redirectOutput(ProcessBuilder.Redirect.INHERIT);
|
||||
Process createAvdProcess = createAvd.start();
|
||||
createAvdProcess.waitFor();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
handleException("Unable to create " + Constants.WSO2_AVD_NAME, e);
|
||||
} catch (InterruptedException ignored) {
|
||||
// interruption in main thread
|
||||
}
|
||||
copyDefaultWSO2Configs();
|
||||
startAVD();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method replaces the default configurations provided in the resources to the WSoO2 AVD created
|
||||
*/
|
||||
private void copyDefaultWSO2Configs() {
|
||||
String configFileLocation = workingDirectory + Constants.WSO2_CONFIG_LOCATION;
|
||||
String wso2ConfigFile = userHome + File.separator + ".android" + File.separator + "avd" + File.separator
|
||||
+ Constants.WSO2_AVD_NAME + ".avd" + File.separator + "config.ini";
|
||||
try {
|
||||
Files.copy(Paths.get(configFileLocation), Paths.get(wso2ConfigFile), StandardCopyOption.REPLACE_EXISTING);
|
||||
} catch (IOException ignored) {
|
||||
System.out.println("WARN : Failed to have WSO2 default AVD configurations");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method runs the Android Emulator for the name specified by deviceId.
|
||||
*
|
||||
* @param deviceId String name of the device.
|
||||
*/
|
||||
private void runEmulator(String deviceId) {
|
||||
if (osSuffix.equals(Constants.MAC_OS) || osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
installHAXM();
|
||||
}
|
||||
System.out.println("Starting : " + deviceId);
|
||||
startEmulator(deviceId);
|
||||
checkCacheImg(deviceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks for the availability of android build tools in SDK location to run the AVD.
|
||||
*/
|
||||
private void checkBuildTools() {
|
||||
File buildTools = new File(androidSdkHome + File.separator + "build-tools"
|
||||
+ File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION));
|
||||
if (!buildTools.exists()) {
|
||||
getTools(System.getProperty(Constants.BUILD_TOOL_URL), "_Android-build-tool.zip");
|
||||
File buildTool = new File(androidSdkHome + File.separator
|
||||
+ System.getProperty(Constants.DOWNLOADED_BUILD_TOOL_NAME));
|
||||
if (!new File(androidSdkHome + File.separator + "build-tools").exists()
|
||||
&& !new File(androidSdkHome + File.separator + "build-tools").mkdir()) {
|
||||
makeDirectoryError("build-tools", androidSdkHome);
|
||||
}
|
||||
buildTool.renameTo(new File(androidSdkHome + File.separator + "build-tools"
|
||||
+ File.separator + System.getProperty(Constants.BUILD_TOOLS_VERSION)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method make sure whether the directory can be created.
|
||||
*
|
||||
* @param name - name of the folder to be made
|
||||
* @param location - location to make folder
|
||||
*/
|
||||
private void makeDirectoryError(String name, String location) {
|
||||
System.out.println("Unable to make folder named " + name + " in " + location);
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method halts the system until the emulator is fully booted
|
||||
* if boot process is not completed successfully, rest of the tasks won't be continued.
|
||||
*/
|
||||
private void checkEmulatorBoot() {
|
||||
BufferedReader reader = null;
|
||||
String readLine;
|
||||
Boolean sysBootComplete = false;
|
||||
do {
|
||||
ProcessBuilder systemBoot = new ProcessBuilder(adbLocation, "shell", "getprop",
|
||||
"sys.boot_completed");
|
||||
try {
|
||||
Process systemBootProcess = systemBoot.start();
|
||||
systemBootProcess.waitFor();
|
||||
reader = new BufferedReader(new InputStreamReader(systemBootProcess.getInputStream(),
|
||||
StandardCharsets.UTF_8));
|
||||
while ((readLine = reader.readLine()) != null) {
|
||||
// if boot process is success the process gives 1 as output
|
||||
if (readLine.contains("1")) {
|
||||
sysBootComplete = true;
|
||||
}
|
||||
}
|
||||
System.out.print(".");
|
||||
delay(1000);
|
||||
} catch (IOException e) {
|
||||
System.out.println("WARN : Unable to check boot process");
|
||||
} catch (InterruptedException ignored) {
|
||||
//interruption in main thread
|
||||
} finally {
|
||||
try {
|
||||
if (reader != null) {
|
||||
reader.close();
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
} while (!sysBootComplete);
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets the Android SDK location if available and sets the SDK path else downloads the SDK.
|
||||
*/
|
||||
private void setAndroidSDK() {
|
||||
sdkConfigFile = new File("sdkConfigLocation");
|
||||
if (!(sdkConfigFile.exists() && !sdkConfigFile.isDirectory())) {
|
||||
//TODO
|
||||
Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
|
||||
System.out.print("Do you have an Android SDK installed on your computer (y/N) ? : ");
|
||||
String response = read.next().toLowerCase();
|
||||
if (response.matches("y")) {
|
||||
setSDKPath();
|
||||
} else {
|
||||
getAndroidSDK();
|
||||
}
|
||||
} else {
|
||||
Scanner scanner = null;
|
||||
try {
|
||||
scanner = new Scanner(sdkConfigFile, StandardCharsets.UTF_8.toString());
|
||||
androidSdkHome = scanner.useDelimiter("\\Z").next();
|
||||
} catch (FileNotFoundException ignored) {
|
||||
//
|
||||
} finally {
|
||||
if (scanner != null) {
|
||||
scanner.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
adbLocation = androidSdkHome + File.separator + "platform-tools" + File.separator + "adb";
|
||||
if (osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
adbLocation += Constants.WINDOWS_EXTENSION_EXE;
|
||||
}
|
||||
setExecutePermission(adbLocation);
|
||||
}
|
||||
|
||||
/**
|
||||
* this method prints the exception and terminate the program.
|
||||
*
|
||||
* @param message -exception method to be printed
|
||||
* @param ex - exception caught
|
||||
*/
|
||||
private void handleException(String message, Exception ex) {
|
||||
System.out.println(message);
|
||||
ex.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method check for the android agent in the specified AVD and installs it if not available.
|
||||
*
|
||||
* @return package name and act name.
|
||||
*/
|
||||
private String[] checkForAgent() {
|
||||
String pkg = null;
|
||||
String activity = null;
|
||||
String readLine;
|
||||
BufferedReader reader = null;
|
||||
String apkFileLocation = workingDirectory + Constants.APK_LOCATION;
|
||||
String aaptLocation = androidSdkHome + File.separator + "build-tools" + File.separator
|
||||
+ System.getProperty(Constants.BUILD_TOOLS_VERSION) + File.separator + "aapt";
|
||||
if (osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
aaptLocation += Constants.WINDOWS_EXTENSION_EXE;
|
||||
}
|
||||
setExecutePermission(aaptLocation);
|
||||
ProcessBuilder badgingApkFileProcessBuilder = new ProcessBuilder(aaptLocation, "d", "badging",
|
||||
apkFileLocation);
|
||||
try {
|
||||
Process badgingApkFileProcess = badgingApkFileProcessBuilder.start();
|
||||
reader = new BufferedReader(new InputStreamReader(badgingApkFileProcess.getInputStream(),
|
||||
StandardCharsets.UTF_8));
|
||||
while ((readLine = reader.readLine()) != null) {
|
||||
if (readLine.contains("package")) {
|
||||
Pattern pattern = Pattern.compile("'(.*?)'");
|
||||
Matcher matcher = pattern.matcher(readLine);
|
||||
if (matcher.find()) {
|
||||
pkg = matcher.group(1);
|
||||
}
|
||||
}
|
||||
if (readLine.contains("launchable-activity")) {
|
||||
Pattern pattern = Pattern.compile("'(.*?)'");
|
||||
Matcher matcher = pattern.matcher(readLine);
|
||||
if (matcher.find()) {
|
||||
activity = matcher.group(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
System.out.println("WARN : Failed to get the available packages");
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException ignored) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!checkForPackage(pkg)) {
|
||||
installAgent();
|
||||
}
|
||||
return new String[]{pkg, activity};
|
||||
}
|
||||
|
||||
/**
|
||||
* This method check whether the package is available in the AVD.
|
||||
*
|
||||
* @param pkg - name og package to check for.
|
||||
* @return - available or not.
|
||||
*/
|
||||
private boolean checkForPackage(String pkg) {
|
||||
String readLine;
|
||||
BufferedReader reader = null;
|
||||
Boolean hasAgent = false;
|
||||
ProcessBuilder listPackages = new ProcessBuilder(adbLocation, "shell", "pm", "list", "packages");
|
||||
try {
|
||||
Process listPackagesProcess = listPackages.start();
|
||||
listPackagesProcess.waitFor();
|
||||
reader = new BufferedReader(new InputStreamReader(listPackagesProcess.getInputStream(),
|
||||
StandardCharsets.UTF_8));
|
||||
while ((readLine = reader.readLine()) != null) {
|
||||
if (readLine.contains("package:" + pkg)) {
|
||||
hasAgent = true;
|
||||
}
|
||||
}
|
||||
} catch (IOException | InterruptedException ignored) {
|
||||
System.out.println("WARN : Failed to check the available packages, agent will be installed");
|
||||
} finally {
|
||||
try {
|
||||
if (reader != null) {
|
||||
reader.close();
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
//
|
||||
}
|
||||
}
|
||||
return hasAgent;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method installs the Android Agent ( WSO2 iot agent ).
|
||||
*/
|
||||
private void installAgent() {
|
||||
String androidAgentLocation = workingDirectory + Constants.APK_LOCATION;
|
||||
System.out.println("Installing agent ...");
|
||||
ProcessBuilder installAgentProcessBuilder = new ProcessBuilder(adbLocation, "install",
|
||||
androidAgentLocation);
|
||||
try {
|
||||
Process installAgentProcess = installAgentProcessBuilder.start();
|
||||
installAgentProcess.waitFor();
|
||||
} catch (Exception e) {
|
||||
System.out.println("WSO2 Agent installation failed");
|
||||
//TODO
|
||||
Scanner read = new Scanner(System.in, StandardCharsets.UTF_8.toString());
|
||||
System.out.println("Do you want to install agent again (Y/N) ? ");
|
||||
if (read.next().toLowerCase().matches("y")) {
|
||||
installAgent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method starts the package (wso2.iot.agent).
|
||||
*
|
||||
* @param agents package name and launchable activity name.
|
||||
*/
|
||||
private void startPackage(String[] agents) {
|
||||
String pkg = agents[0];
|
||||
String activity = agents[1];
|
||||
ProcessBuilder pkgStartProcessBuilder = new ProcessBuilder(adbLocation, "shell", "am", "start",
|
||||
"-n", pkg + "/" + activity);
|
||||
try {
|
||||
Process pkgStartProcess = pkgStartProcessBuilder.start();
|
||||
pkgStartProcess.waitFor();
|
||||
} catch (InterruptedException ignored) {
|
||||
//
|
||||
} catch (IOException e) {
|
||||
handleException("Unable to start WSO2 package", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks for the availability of Android Platform in SDK and if not available downloads it.
|
||||
*/
|
||||
private void checkForPlatform() {
|
||||
File platform = new File(androidSdkHome + File.separator + "platforms" + File.separator
|
||||
+ System.getProperty(Constants.TARGET_VERSION));
|
||||
if (!platform.isDirectory()) {
|
||||
getTools(System.getProperty(Constants.PLATFORM_URL), "_Android-platforms.zip");
|
||||
if (!new File(androidSdkHome + File.separator + "platforms").exists()
|
||||
&& !new File(androidSdkHome + File.separator + "platforms").mkdir()) {
|
||||
makeDirectoryError("platforms", androidSdkHome);
|
||||
}
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
new File(androidSdkHome + File.separator + System.getProperty(Constants.DOWNLOADED_PLATFORM_NAME)).
|
||||
renameTo(new File(androidSdkHome + File.separator + "platforms"
|
||||
+ File.separator + System.getProperty(Constants.TARGET_VERSION)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks for the system images in the Android SDK and downloads if not available.
|
||||
*/
|
||||
private void checkForSystemImages() {
|
||||
File systemImages = new File(androidSdkHome + File.separator + "system-images"
|
||||
+ File.separator + System.getProperty(Constants.TARGET_VERSION) + File.separator + "default");
|
||||
|
||||
if (!systemImages.isDirectory()) {
|
||||
getTools(System.getProperty(Constants.SYSTEM_IMAGE_URL), "_sys-images.zip");
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
new File(androidSdkHome + File.separator + "system-images" + File.separator
|
||||
+ System.getProperty(Constants.TARGET_VERSION) + File.separator + "default").mkdirs();
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
new File(androidSdkHome + File.separator + System.getProperty(Constants.OS_TARGET))
|
||||
.renameTo(new File(androidSdkHome + File.separator + "system-images" + File.separator
|
||||
+ System.getProperty(Constants.TARGET_VERSION) + File.separator + "default"
|
||||
+ File.separator + System.getProperty(Constants.OS_TARGET)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method install Hardware_Accelerated Execution_Manager in mac and windows os.
|
||||
*/
|
||||
private void installHAXM() {
|
||||
String haxmLocation = androidSdkHome + File.separator + "extras" + File.separator + "intel"
|
||||
+ File.separator + "Hardware_Accelerated_Execution_Manager";
|
||||
|
||||
if (!new File(haxmLocation).isDirectory()) {
|
||||
//System.out.println("Downloading intel HAXM...");
|
||||
if (!new File(haxmLocation).mkdirs()) {
|
||||
makeDirectoryError(haxmLocation, androidSdkHome);
|
||||
}
|
||||
String folderName = "_haxm.zip";
|
||||
getTools(System.getProperty(Constants.HAXM_URL), haxmLocation + File.separator
|
||||
+ folderName);
|
||||
String haxmInstaller = haxmLocation + File.separator + "silent_install";
|
||||
if (osSuffix.equals(Constants.WINDOWS_OS)) {
|
||||
haxmInstaller += Constants.WINDOWS_EXTENSION_BAT;
|
||||
} else {
|
||||
haxmInstaller += Constants.MAC_HAXM_EXTENSION;
|
||||
}
|
||||
setExecutePermission(haxmInstaller);
|
||||
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(haxmInstaller, "-m", "2048", "-log",
|
||||
workingDirectory + File.separator + "haxmSilentRun.log");
|
||||
processBuilder.directory(new File(haxmLocation));
|
||||
processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
|
||||
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
|
||||
try {
|
||||
Process process = processBuilder.start();
|
||||
process.waitFor();
|
||||
} catch (IOException | InterruptedException e) {
|
||||
System.out.println("HAXM installation failed, install HAXM and try again");
|
||||
}
|
||||
System.out.println("Please restart your machine and run again.");
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method starts the Android emulator for specific device name.
|
||||
*
|
||||
* @param deviceId - name of the device to start the emulator.
|
||||
*/
|
||||
private void startEmulator(String deviceId) {
|
||||
String qemuSystemFileLocation = androidSdkHome + File.separator + "tools" + File.separator
|
||||
+ "qemu" + File.separator;
|
||||
|
||||
switch (osSuffix) {
|
||||
case Constants.MAC_OS:
|
||||
qemuSystemFileLocation += Constants.MAC_DARWIN + "-x86_64" + File.separator + "qemu-system-i386";
|
||||
break;
|
||||
case Constants.WINDOWS_OS:
|
||||
qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386.exe";
|
||||
break;
|
||||
default:
|
||||
qemuSystemFileLocation += osSuffix + "-x86_64" + File.separator + "qemu-system-i386";
|
||||
}
|
||||
killServer();
|
||||
setExecutePermission(qemuSystemFileLocation);
|
||||
ExecutorService service = Executors.newSingleThreadExecutor();
|
||||
service.execute(new TryItEmulator(deviceId, emulatorLocation));
|
||||
}
|
||||
|
||||
/**
|
||||
* This method ensures device properly starts.
|
||||
*/
|
||||
private void killServer() {
|
||||
ProcessBuilder processBuilderKillServer = new ProcessBuilder(adbLocation, "kill-server");
|
||||
Process processKillServer = null;
|
||||
try {
|
||||
processKillServer = processBuilderKillServer.start();
|
||||
} catch (IOException ignored) {
|
||||
System.out.println("If the device doesn't start properly, stop running the script and restart again");
|
||||
}
|
||||
try {
|
||||
if (processKillServer != null) {
|
||||
processKillServer.waitFor();
|
||||
}
|
||||
} catch (InterruptedException ignored) {
|
||||
System.out.println("If the device doesn't start properly, stop running the script and restart again");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method halts the system the cache.img file is created for the particular AVD started.
|
||||
*
|
||||
* @param deviceId - name of the AVD.
|
||||
*/
|
||||
private void checkCacheImg(String deviceId) {
|
||||
File cacheImg = new File(userHome + File.separator + ".android"
|
||||
+ File.separator + "avd" + File.separator + deviceId + ".avd" + File.separator + "cache.img");
|
||||
while (!cacheImg.exists()) {
|
||||
System.out.print(".");
|
||||
delay(1000);
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the executable permission for the specified file,
|
||||
* if the files are not the executable, the process cannot be continued.
|
||||
*
|
||||
* @param fileName name of the file to set execution permission.
|
||||
*/
|
||||
private void setExecutePermission(String fileName) {
|
||||
if (!new File(fileName).canExecute()) {
|
||||
if (!new File(fileName).setExecutable(true)) {
|
||||
System.out.println("Unable to set the execute permission of : " + fileName);
|
||||
System.out.println("Please set the executable permission for file "
|
||||
+ new File(fileName).getAbsolutePath() + " to continue");
|
||||
System.exit(1); // if can't execute, unable to proceed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method extracts the zip folder.
|
||||
*
|
||||
* @param zipFile -Name of zip to extract
|
||||
*/
|
||||
private void extractFolder(String zipFile) {
|
||||
int BUFFER = 2048;
|
||||
File file = new File(zipFile);
|
||||
ZipFile zip;
|
||||
try {
|
||||
zip = new ZipFile(file);
|
||||
String newPath = zipFile.substring(0, zipFile.lastIndexOf(File.separator));
|
||||
new File(newPath).mkdirs();
|
||||
Enumeration zipFileEntries = zip.entries();
|
||||
while (zipFileEntries.hasMoreElements()) {
|
||||
// grab a zip file entry
|
||||
ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
|
||||
String currentEntry = entry.getName();
|
||||
File destFile = new File(newPath, currentEntry);
|
||||
File destinationParent = destFile.getParentFile();
|
||||
if (destinationParent == null) {
|
||||
destFile.mkdirs();
|
||||
continue;
|
||||
} else {
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
destinationParent.mkdirs();
|
||||
}
|
||||
if (!entry.isDirectory()) {
|
||||
BufferedInputStream is;
|
||||
try {
|
||||
is = new BufferedInputStream(zip.getInputStream(entry));
|
||||
int currentByte;
|
||||
// establish buffer for writing file
|
||||
byte data[] = new byte[BUFFER];
|
||||
// write the current file to disk
|
||||
FileOutputStream fos = new FileOutputStream(destFile);
|
||||
BufferedOutputStream dest = new BufferedOutputStream(fos,
|
||||
BUFFER);
|
||||
// read and write until last byte is encountered
|
||||
while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
|
||||
dest.write(data, 0, currentByte);
|
||||
}
|
||||
dest.flush();
|
||||
dest.close();
|
||||
is.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
zip.close();
|
||||
} catch (IOException e) {
|
||||
handleException("Extraction of " + zipFile + " failed", e);
|
||||
}
|
||||
if (!new File(zipFile).delete()) {
|
||||
System.out.println("Downloaded zip : " + zipFile + " - not deleted");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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
|
||||
*
|
||||
* 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
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.carbon.android.emulator;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* This class starts the Emulator with the name ID specified and log the output to emulator.log.
|
||||
*/
|
||||
public class TryItEmulator implements Runnable {
|
||||
private String deviceId; // name of the AVD to start
|
||||
private String emulatorLocation; // location of the executable file emulator
|
||||
|
||||
TryItEmulator(String id, String emulator) {
|
||||
deviceId = id;
|
||||
emulatorLocation = emulator;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
String readLine;
|
||||
BufferedReader reader = null;
|
||||
Writer writer = null;
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(emulatorLocation, "-avd", deviceId);
|
||||
try {
|
||||
Process process = processBuilder.start();
|
||||
reader = new BufferedReader(new InputStreamReader(process.getInputStream(),
|
||||
StandardCharsets.UTF_8));
|
||||
writer = new OutputStreamWriter(new FileOutputStream(new File("emulator.log")),
|
||||
StandardCharsets.UTF_8);
|
||||
while ((readLine = reader.readLine()) != null) {
|
||||
writer.append(readLine);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.out.println("Error in starting " + deviceId);
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (reader != null) {
|
||||
reader.close();
|
||||
}
|
||||
if (writer != null) {
|
||||
writer.close();
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
//
|
||||
}
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
@ -20,16 +20,21 @@
|
||||
<project name="create-geo-fence-capps" default="zip" basedir=".">
|
||||
|
||||
<property name="project-name" value="${ant.project.name}"/>
|
||||
<property name="target-dir" value="target/"/>
|
||||
<property name="target-dir" value="target/ant"/>
|
||||
<property name="src-dir" value="src/main/resources/android-tryit"/>
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="${target-dir}" />
|
||||
<delete dir="${target-dir}"/>
|
||||
</target>
|
||||
|
||||
<target name="zip" depends="clean">
|
||||
<zip destfile="${target-dir}/android-tryit.ZIP">
|
||||
<zipfileset dir="src/main/resources/jaggeryapps/android-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/" includes="android-agent.apk" fullpath="resources/android-agent.apk"/>
|
||||
<zip destfile="${target-dir}/android-tryit.ZIP" update="true" duplicate="preserve">
|
||||
<zipfileset
|
||||
dir="src/main/resources/jaggeryapps/android-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/"
|
||||
includes="android-agent.apk" fullpath="resources/android-agent.apk"/>
|
||||
<zipfileset
|
||||
dir="target/"
|
||||
includes="JavaApp.jar" fullpath="JavaApp.jar"/>
|
||||
<zipfileset dir="${src-dir}/" includes="startEmulator.sh" filemode="755"/>
|
||||
<zipfileset dir="${src-dir}"/>
|
||||
</zip>
|
||||
</target>
|
||||
|
||||
@ -18,7 +18,8 @@
|
||||
~ under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<parent>
|
||||
<artifactId>android-plugin</artifactId>
|
||||
@ -35,15 +36,41 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-jar</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.mobile.android.emulator</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<overWrite>true</overWrite>
|
||||
<outputDirectory>${project.basedir}/target/
|
||||
</outputDirectory>
|
||||
<destFileName>JavaApp.jar</destFileName>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>${maven-antrun-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>process-resources</phase>
|
||||
<phase>package</phase>
|
||||
<configuration>
|
||||
<target>
|
||||
<ant antfile="build.xml" target="zip" />
|
||||
<ant antfile="build.xml" target="zip"/>
|
||||
</target>
|
||||
</configuration>
|
||||
<goals>
|
||||
|
||||
@ -46,9 +46,10 @@
|
||||
<files>
|
||||
<file>
|
||||
<source>
|
||||
${basedir}/target/android-tryit.ZIP
|
||||
${basedir}/target/ant/android-tryit.ZIP
|
||||
</source>
|
||||
<outputDirectory>/devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/</outputDirectory>
|
||||
<outputDirectory>/devicemgt/app/units/cdmf.unit.device.type.android.type-view/public/assets/
|
||||
</outputDirectory>
|
||||
<fileMode>755</fileMode>
|
||||
</file>
|
||||
</files>
|
||||
|
||||
@ -1,21 +1,20 @@
|
||||
Prerequisites
|
||||
===============
|
||||
1. You should have curl in your computer.
|
||||
2. Java 7 or higher.
|
||||
1. Java 8.
|
||||
|
||||
Instructions
|
||||
=================
|
||||
============
|
||||
|
||||
1. Run 'start' script in your terminal.
|
||||
1. For Linux/Mac : Run 'startEmulator.sh' script in your terminal from the current directory.
|
||||
For Windows : Run 'startEmulator.bat' script in your terminal from the current directory.
|
||||
2. If you already have android sdk in your computer, please provide location of the sdk.
|
||||
Otherwise this tool will download and install minimum SDK components which needs to run the emulator.
|
||||
This is a one time process.
|
||||
3. This tool will ask to create AVD if you don't have any in your computer.
|
||||
Otherwise you can select existing AVD to try out IoT Agent.
|
||||
|
||||
|
||||
Troubleshooting
|
||||
==================
|
||||
|
||||
1. If your exisitng SDK doen't work or giving any errors, delete 'sdklocation' file and try agin without selecting the existing SDK path.
|
||||
1. If your existing SDK does not work or giving any errors, delete 'sdkConfigLocation' file and try again without selecting the existing SDK path.
|
||||
2. If your emulator does not start correctly, please remove all files and directories in $HOME/.android/avd/ directory. Then try again with a new emulator.
|
||||
|
||||
@ -1,244 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Make sure we have got everything we need
|
||||
command -v curl >/dev/null || { echo "curl is not installed. Aborting." >&2; exit 1; }
|
||||
command -v unzip >/dev/null || { echo "unzip is not installed. Aborting." >&2; exit 1; }
|
||||
|
||||
SCRIPT_HOME=$PWD
|
||||
|
||||
OS_SUFFIX="linux"
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
OS_SUFFIX="macosx"
|
||||
fi
|
||||
|
||||
downloadArtifacts() {
|
||||
curl -D headers -O $1
|
||||
httpStatus=$(head -1 headers | awk '{print $2}')
|
||||
[ "$httpStatus" != "200" ] && { echo "Download failed. Aborting." ; exit 1 ;}
|
||||
rm headers
|
||||
echo
|
||||
}
|
||||
|
||||
setSDKPath () {
|
||||
echo -n "Please provide Android SDK location (ex: /mnt/tools/android-sdk):"
|
||||
read answer
|
||||
emulator="$answer/tools/emulator"
|
||||
if [ -f "$emulator" ]; then
|
||||
echo "$answer" > sdklocation
|
||||
else
|
||||
echo "Invalid SDK location"
|
||||
setSDKPath
|
||||
fi
|
||||
}
|
||||
|
||||
getAndroidSDK() {
|
||||
echo
|
||||
echo "Downloading Android SDK tools..."
|
||||
mkdir android-sdk
|
||||
cd android-sdk
|
||||
|
||||
downloadArtifacts "https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip"
|
||||
echo -n "Configuring Android SDK tools..."
|
||||
unzip -q tools_r25.2.5-$OS_SUFFIX.zip
|
||||
rm tools_r25.2.5-$OS_SUFFIX.zip
|
||||
echo " Done!"
|
||||
|
||||
echo
|
||||
echo "Downloading Android platform tools..."
|
||||
downloadArtifacts "http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip"
|
||||
|
||||
echo -n "Configuring Android platform tools..."
|
||||
unzip -q platform-tools_r25.0.3-$OS_SUFFIX.zip
|
||||
rm platform-tools_r25.0.3-$OS_SUFFIX.zip
|
||||
cd ..
|
||||
echo "$PWD/android-sdk" > sdklocation
|
||||
echo " Done!"
|
||||
}
|
||||
|
||||
createAVD() {
|
||||
if [ ! -d "$ANDROID_TRYIT_SDK_HOME/platforms/android-23" ]; then
|
||||
echo
|
||||
echo "Downloading Android platform..."
|
||||
cd $ANDROID_TRYIT_SDK_HOME
|
||||
downloadArtifacts "https://dl.google.com/android/repository/platform-23_r03.zip"
|
||||
echo -n "Configuring Android platform..."
|
||||
unzip -q platform-23_r03.zip
|
||||
mkdir -p platforms/android-23
|
||||
mv android-6.0/* platforms/android-23/
|
||||
rm -r android-6.0
|
||||
rm platform-23_r03.zip
|
||||
cd ..
|
||||
echo " Done!"
|
||||
fi
|
||||
if [ ! -d "$ANDROID_TRYIT_SDK_HOME/system-images/android-23/default" ]; then
|
||||
echo "Downloading Android system image..."
|
||||
cd $ANDROID_TRYIT_SDK_HOME
|
||||
downloadArtifacts "https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"
|
||||
echo -n "Configuring Android system image..."
|
||||
unzip -q x86-23_r09.zip
|
||||
mkdir -p system-images/android-23/default
|
||||
mv x86 system-images/android-23/default
|
||||
rm x86-23_r09.zip
|
||||
cd ..
|
||||
echo " Done!"
|
||||
fi
|
||||
echo "Creating a new AVD device"
|
||||
if [ -f "$ANDROID_TRYIT_SDK_HOME/tools/bin/avdmanager" ]; then
|
||||
$ANDROID_TRYIT_SDK_HOME/tools/bin/avdmanager create avd -k 'system-images;android-23;default;x86' -n WSO2_AVD
|
||||
else
|
||||
$ANDROID_TRYIT_SDK_HOME/tools/android create avd -n WSO2_AVD -t android-23
|
||||
fi
|
||||
rm $HOME/.android/avd/WSO2_AVD.avd/config.ini
|
||||
cp $SCRIPT_HOME/resources/config.ini $HOME/.android/avd/WSO2_AVD.avd/
|
||||
startAVD
|
||||
}
|
||||
|
||||
startAVD() {
|
||||
if [ ! -d "$HOME/.android/avd/WSO2_AVD.avd" ]; then
|
||||
echo -n "Looks you don't have the WSO2_AVD. Do you want to create WSO2_AVD with default configs (Y/n)?: "
|
||||
read answer
|
||||
if ! echo "$answer" | grep -iq "^n" ;then
|
||||
createAVD
|
||||
return
|
||||
fi
|
||||
fi
|
||||
echo
|
||||
echo "------------------------------"
|
||||
echo "Available AVDs in the system:"
|
||||
echo "------------------------------"
|
||||
devices=()
|
||||
count=0
|
||||
if [ ! -f "mypipe" ]; then
|
||||
mkfifo mypipe
|
||||
fi
|
||||
$ANDROID_TRYIT_SDK_HOME/tools/emulator -list-avds > mypipe &
|
||||
while IFS= read -r line
|
||||
do
|
||||
let count++
|
||||
echo "$count) $line"
|
||||
devices+=($line)
|
||||
done < mypipe
|
||||
rm mypipe
|
||||
echo "------------------------------"
|
||||
echo
|
||||
if [ $count = 0 ]; then
|
||||
echo -n "No AVDs found on your system. Do you want to create new AVD (Y/n)?: "
|
||||
read answer
|
||||
if echo "$answer" | grep -iq "^n" ;then
|
||||
exit;
|
||||
else
|
||||
createAVD
|
||||
fi
|
||||
elif [ $count = 1 ]; then
|
||||
runEmulator ${devices[0]}
|
||||
else
|
||||
echo -n "Enter AVD number to start (eg: 1): "
|
||||
read answer
|
||||
let answer--
|
||||
runEmulator ${devices[$answer]}
|
||||
fi
|
||||
}
|
||||
|
||||
runEmulator(){
|
||||
if [ $OS_SUFFIX = "macosx" -a ! -d $ANDROID_TRYIT_SDK_HOME/extras/intel/Hardware_Accelerated_Execution_Manager ]; then
|
||||
cd $ANDROID_TRYIT_SDK_HOME
|
||||
echo "Downloading intel HAXM..."
|
||||
mkdir -p extras/intel/Hardware_Accelerated_Execution_Manager
|
||||
cd extras/intel/Hardware_Accelerated_Execution_Manager
|
||||
downloadArtifacts "https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip"
|
||||
echo -n "Configuring HAXM..."
|
||||
unzip -q haxm-macosx_r6_0_5.zip
|
||||
rm haxm-macosx_r6_0_5.zip
|
||||
./"HAXM installation" -m 2048 -log $SCRIPT_HOME/haxm_silent_run.log
|
||||
echo " Done!"
|
||||
echo "Please restart your computer and run this script again."
|
||||
exit
|
||||
fi
|
||||
cd $SCRIPT_HOME
|
||||
$ANDROID_TRYIT_SDK_HOME/platform-tools/adb kill-server
|
||||
echo "Starting AVD $1"
|
||||
$ANDROID_TRYIT_SDK_HOME/tools/emulator -avd $1 > emulator.log &
|
||||
while [ ! -f "$HOME/.android/avd/$1.avd/cache.img" ]
|
||||
do
|
||||
sleep 1
|
||||
echo -n "."
|
||||
done
|
||||
count=0
|
||||
while [ $count -lt 5 ]
|
||||
do
|
||||
sleep 1
|
||||
echo -n "."
|
||||
let count++
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
echo "+----------------------------------------------------------------+"
|
||||
echo "| WSO2 Android Tryit |"
|
||||
echo "+----------------------------------------------------------------+"
|
||||
echo "Detected OS: " $OSTYPE
|
||||
if [ ! -f "sdklocation" ]; then
|
||||
echo -n "Do you have an Android SDK installed on your computer (y/N)?: "
|
||||
read answer
|
||||
if echo "$answer" | grep -iq "^y" ;then
|
||||
setSDKPath
|
||||
else
|
||||
getAndroidSDK
|
||||
fi
|
||||
fi
|
||||
export ANDROID_TRYIT_SDK_HOME=$(<sdklocation)
|
||||
|
||||
if [ ! -d "$ANDROID_TRYIT_SDK_HOME/build-tools/25.0.2" ]; then
|
||||
echo
|
||||
echo "Downloading Android build tools..."
|
||||
cd $ANDROID_TRYIT_SDK_HOME
|
||||
downloadArtifacts "https://dl.google.com/android/repository/build-tools_r25.0.2-$OS_SUFFIX.zip"
|
||||
echo -n "Configuring Android build tools..."
|
||||
unzip -q build-tools_r25.0.2-$OS_SUFFIX.zip
|
||||
mkdir -p build-tools/25.0.2
|
||||
mv android-7.1.1/* build-tools/25.0.2/
|
||||
rm -r android-7.1.1
|
||||
rm build-tools_r25.0.2-$OS_SUFFIX.zip
|
||||
echo " Done!"
|
||||
fi
|
||||
|
||||
startAVD
|
||||
|
||||
while [ "`$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done
|
||||
echo "AVD Started!"
|
||||
|
||||
sleep 1
|
||||
if [ ! -f "mypipe" ]; then
|
||||
mkfifo mypipe
|
||||
fi
|
||||
|
||||
app=$SCRIPT_HOME/resources/android-agent.apk
|
||||
pkg=$($ANDROID_TRYIT_SDK_HOME/build-tools/25.0.2/aapt dump badging $app|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
|
||||
act=$($ANDROID_TRYIT_SDK_HOME/build-tools/25.0.2/aapt dump badging $app|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
|
||||
|
||||
hasAgent=false
|
||||
|
||||
$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell pm list packages > mypipe &
|
||||
while IFS= read -r line
|
||||
do
|
||||
if [ $line = "package:$pkg" ]; then
|
||||
let hasAgent=true
|
||||
fi
|
||||
done < mypipe
|
||||
rm mypipe
|
||||
|
||||
if [ $hasAgent = false ]; then
|
||||
echo
|
||||
echo "Installing agent..."
|
||||
cd $SCRIPT_HOME/resources
|
||||
$ANDROID_TRYIT_SDK_HOME/platform-tools/adb install android-agent.apk
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Staring agent..."
|
||||
$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell am start -n $pkg/$act
|
||||
echo
|
||||
echo "Connected to device shell"
|
||||
$ANDROID_TRYIT_SDK_HOME/platform-tools/adb shell
|
||||
echo
|
||||
echo "Good bye!"
|
||||
@ -0,0 +1,17 @@
|
||||
@echo off
|
||||
echo Welcome
|
||||
|
||||
java^
|
||||
-Dsdk.tools.url="https://dl.google.com/android/repository/tools_r25.2.5-windows.zip"^
|
||||
-Dplatform.tools.url="http://dl.google.com/android/repository/platform-tools_r25.0.3-windows.zip"^
|
||||
-Dbuild.tools.url="https://dl.google.com/android/repository/build-tools_r25.0.2-windows.zip"^
|
||||
-Dplatform.url="https://dl.google.com/android/repository/platform-23_r03.zip"^
|
||||
-Dsys.img.url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"^
|
||||
-Dhaxm.url="https://dl.google.com/android/repository/extras/intel/haxm-windows_r6_0_5.zip"^
|
||||
-Ddownloaded.build.tool.name="android-7.1.1"^
|
||||
-Dbuild.tool.version="25.0.2"^
|
||||
-Ddownloaded.platform.name="android-6.0"^
|
||||
-Dtarget.version="android-23"^
|
||||
-Dos.target="x86"^
|
||||
-jar JavaApp.jar
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
echo Welcome
|
||||
|
||||
OS_SUFFIX="linux"
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
OS_SUFFIX="macosx"
|
||||
fi
|
||||
|
||||
java\
|
||||
-Dsdk.tools.url="https://dl.google.com/android/repository/tools_r25.2.5-$OS_SUFFIX.zip"\
|
||||
-Dplatform.tools.url="http://dl.google.com/android/repository/platform-tools_r25.0.3-$OS_SUFFIX.zip"\
|
||||
-Dbuild.tools.url="https://dl.google.com/android/repository/build-tools_r25.0.2-$OS_SUFFIX.zip"\
|
||||
-Dplatform.url="https://dl.google.com/android/repository/platform-23_r03.zip"\
|
||||
-Dsys.img.url="https://dl.google.com/android/repository/sys-img/android/x86-23_r09.zip"\
|
||||
-Dhaxm.url="https://dl.google.com/android/repository/extras/intel/haxm-macosx_r6_0_5.zip"\
|
||||
-Ddownloaded.build.tool.name="android-7.1.1"\
|
||||
-Dbuild.tool.version="25.0.2"\
|
||||
-Ddownloaded.platform.name="android-6.0"\
|
||||
-Dtarget.version="android-23"\
|
||||
-Dos.target="x86"\
|
||||
-jar JavaApp.jar
|
||||
|
||||
@ -13,7 +13,8 @@
|
||||
data-deviceid="{{device.deviceIdentifier}}"
|
||||
data-type="{{device.type}}"
|
||||
data-ownership="{{device.ownership}}"
|
||||
data-owner="{{device.owner}}">
|
||||
data-owner="{{device.owner}}"
|
||||
data-status="{{device.status}}">
|
||||
{{device.owner}}'s {{device.name}}
|
||||
<a id="device-info-tooltip" href="#" data-toggle="tooltip" title="Device Identifier: {{device.deviceIdentifier}}
|
||||
Firmware Build Date: {{device.osBuildDate}}
|
||||
@ -49,25 +50,27 @@
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details"}}
|
||||
{{#if device.deviceInfoAvailable}}
|
||||
{{#if device.BatteryLevel}}
|
||||
<p><i class="icon fw fw-battery fw-2x"></i> <span>{{device.BatteryLevel.value}}%</span></p>
|
||||
<div class="vital-strip">
|
||||
{{#if device.deviceInfoAvailable}}
|
||||
{{#if device.BatteryLevel}}
|
||||
<p><i class="icon fw fw-battery fw-2x"></i> <span>{{device.BatteryLevel.value}}%</span></p>
|
||||
{{/if}}
|
||||
{{#if device.ramUsage}}
|
||||
<p><i class="icon fw fw-hardware fw-2x fw-rotate-90"></i> <span>{{device.ramUsage.value}}%</span></p>
|
||||
{{/if}}
|
||||
{{#if device.internalMemory}}
|
||||
<p><i class="icon fw fw-hdd fw-2x fw-rotate-90"></i> <span>{{device.internalMemory.usage}}</span>
|
||||
<span class="memory-amt">GB/{{device.internalMemory.total}}GB</span></p>
|
||||
{{/if}}
|
||||
{{#if device.externalMemory}}
|
||||
<p><i class="icon fw fw-usb-drive fw-2x"></i> <span>{{device.externalMemory.usage}}</span>
|
||||
<span class="memory-amt">GB/{{device.externalMemory.total}}GB</span></p>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<p>Battery, RAM and Storage related information are not
|
||||
available yet.</p>
|
||||
{{/if}}
|
||||
{{#if device.ramUsage}}
|
||||
<p><i class="icon fw fw-hardware fw-2x fw-rotate-90"></i> <span>{{device.ramUsage.value}}%</span></p>
|
||||
{{/if}}
|
||||
{{#if device.internalMemory}}
|
||||
<p><i class="icon fw fw-hdd fw-2x fw-rotate-90"></i> <span>{{device.internalMemory.usage}}</span>
|
||||
<span class="memory-amt">GB/{{device.internalMemory.total}}GB</span></p>
|
||||
{{/if}}
|
||||
{{#if device.externalMemory}}
|
||||
<p><i class="icon fw fw-usb-drive fw-2x"></i> <span>{{device.externalMemory.usage}}</span>
|
||||
<span class="memory-amt">GB/{{device.externalMemory.total}}GB</span></p>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<p>Battery, RAM and Storage related information are not
|
||||
available yet.</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details-tab-injected"}}
|
||||
@ -78,8 +81,19 @@
|
||||
|
||||
{{#zone "device-view-tab-injected-conents"}}
|
||||
<div id="location" class="tab-pane fade">
|
||||
<iframe width="100%" height="100%" frameborder="0" style="border:0"
|
||||
src="https://www.google.com/maps/embed/v1/place?q=place_id:ChIJk_gsqyVZ4joR4UxR7brwMnA&key=AIzaSyChgf100i4rBz6neCNRyK1D05g9VLY8jvo" allowfullscreen></iframe>
|
||||
{{#if device.location}}
|
||||
{{unit "cdmf.unit.geo-dashboard" device=device noGeoFencing=false hideSearch=true}}
|
||||
{{else}}
|
||||
<div id="map-error" class="message message-warning">
|
||||
<h4 class="remove-margin">
|
||||
<i class="icon fw fw-warning"></i>
|
||||
Device location information is not available.
|
||||
</h4>
|
||||
</div>
|
||||
<p class="add-padding-5x"></p>
|
||||
<p class="add-padding-5x"></p>
|
||||
<p class="add-padding-5x"></p>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div id="app" class="tab-pane fade">
|
||||
<div id="applications-list-container" data-public-uri="{{@unit.publicUri}}">
|
||||
|
||||
@ -51,6 +51,7 @@
|
||||
|
||||
<div class="operation" data-operation-code="{{operation}}">
|
||||
<div class="content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
@ -65,6 +66,11 @@
|
||||
{{description}}
|
||||
<br>
|
||||
</h4>
|
||||
|
||||
<div id="operation-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
|
||||
<div id="operation-form">
|
||||
<form action="{{params.0.uri}}" method="{{params.0.method}}"
|
||||
style="padding-bottom: 20px;"
|
||||
|
||||
@ -27,6 +27,11 @@ function operationSelect(selection) {
|
||||
showPopup();
|
||||
}
|
||||
|
||||
var resetLoader = function () {
|
||||
$("#btnSend").removeClass("hidden");
|
||||
$('#lbl-execution').addClass("hidden");
|
||||
};
|
||||
|
||||
function submitForm(formId) {
|
||||
$("#btnSend").addClass("hidden");
|
||||
$("#lbl-execution").removeClass("hidden");
|
||||
@ -48,9 +53,9 @@ function submitForm(formId) {
|
||||
} else if (input.data("param-type") == "form") {
|
||||
var prefix = (uriencodedFormStr == "") ? "" : "&";
|
||||
uriencodedFormStr += prefix + input.attr("id") + "=" + input.val();
|
||||
if(input.attr("type") == "text"){
|
||||
if (input.attr("type") == "text") {
|
||||
payload[input.attr("id")] = input.val();
|
||||
} else if(input.attr("type") == "checkbox"){
|
||||
} else if (input.attr("type") == "checkbox") {
|
||||
payload[input.attr("id")] = input.is(":checked");
|
||||
}
|
||||
}
|
||||
@ -58,71 +63,74 @@ function submitForm(formId) {
|
||||
uri += uriencodedQueryStr;
|
||||
var httpMethod = form.attr("method").toUpperCase();
|
||||
//var contentType = form.attr("enctype");
|
||||
var validaterString = validatePayload(operationCode, payload);
|
||||
|
||||
if (contentType == undefined || contentType == "") {
|
||||
contentType = "application/x-www-form-urlencoded";
|
||||
payload = uriencodedFormStr;
|
||||
}
|
||||
if (validaterString == "OK") {
|
||||
|
||||
//setting responses callbacks
|
||||
var defaultStatusClasses = "fw fw-stack-1x";
|
||||
var content = $("#operation-response-template").find(".content");
|
||||
var title = content.find("#title");
|
||||
var statusIcon = content.find("#status-icon");
|
||||
var description = content.find("#description");
|
||||
description.html("");
|
||||
|
||||
var resetLoader = function () {
|
||||
$("#btnSend").removeClass("hidden");
|
||||
$('#lbl-execution').addClass("hidden");
|
||||
};
|
||||
|
||||
var successCallBack = function (response) {
|
||||
var res = response;
|
||||
try {
|
||||
res = JSON.parse(response).messageFromServer;
|
||||
} catch (err) {
|
||||
//do nothing
|
||||
if (contentType == undefined || contentType == "") {
|
||||
contentType = "application/x-www-form-urlencoded";
|
||||
payload = uriencodedFormStr;
|
||||
}
|
||||
title.html("Operation Triggered!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-check");
|
||||
description.html(res);
|
||||
// console.log("success!");
|
||||
resetLoader();
|
||||
$(modalPopupContent).html(content.html());
|
||||
};
|
||||
var errorCallBack = function (response) {
|
||||
// console.log(response);
|
||||
title.html("An Error Occurred!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-error");
|
||||
var reason = (response.responseText == "null")?response.statusText:response.responseText;
|
||||
try {
|
||||
reason = JSON.parse(reason).message;
|
||||
} catch (err) {
|
||||
//do nothing
|
||||
|
||||
//setting responses callbacks
|
||||
var defaultStatusClasses = "fw fw-stack-1x";
|
||||
var content = $("#operation-response-template").find(".content");
|
||||
var title = content.find("#title");
|
||||
var statusIcon = content.find("#status-icon");
|
||||
var description = content.find("#description");
|
||||
description.html("");
|
||||
|
||||
var successCallBack = function (response) {
|
||||
var res = response;
|
||||
try {
|
||||
res = JSON.parse(response).messageFromServer;
|
||||
} catch (err) {
|
||||
//do nothing
|
||||
}
|
||||
title.html("Operation Triggered!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-check");
|
||||
description.html(res);
|
||||
// console.log("success!");
|
||||
resetLoader();
|
||||
$(modalPopupContent).html(content.html());
|
||||
};
|
||||
var errorCallBack = function (response) {
|
||||
// console.log(response);
|
||||
title.html("An Error Occurred!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-error");
|
||||
var reason = (response.responseText == "null") ? response.statusText : response.responseText;
|
||||
try {
|
||||
reason = JSON.parse(reason).message;
|
||||
} catch (err) {
|
||||
//do nothing
|
||||
}
|
||||
description.html(reason);
|
||||
// console.log("Error!");
|
||||
resetLoader();
|
||||
$(modalPopupContent).html(content.html());
|
||||
};
|
||||
//executing http request
|
||||
if (httpMethod == "GET") {
|
||||
invokerUtil.get(uri, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "POST") {
|
||||
var deviceList = [deviceId];
|
||||
payload = generatePayload(operationCode, payload, deviceList);
|
||||
invokerUtil.post(uri, payload, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "PUT") {
|
||||
invokerUtil.put(uri, payload, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "DELETE") {
|
||||
invokerUtil.delete(uri, successCallBack, errorCallBack, contentType);
|
||||
} else {
|
||||
title.html("An Error Occurred!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-error");
|
||||
description.html("This operation requires http method: " + httpMethod + " which is not supported yet!");
|
||||
resetLoader();
|
||||
$(modalPopupContent).html(content.html());
|
||||
}
|
||||
description.html(reason);
|
||||
// console.log("Error!");
|
||||
resetLoader();
|
||||
$(modalPopupContent).html(content.html());
|
||||
};
|
||||
//executing http request
|
||||
if (httpMethod == "GET") {
|
||||
invokerUtil.get(uri, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "POST") {
|
||||
var deviceList = [deviceId];
|
||||
payload = generatePayload(operationCode, payload, deviceList);
|
||||
invokerUtil.post(uri, payload, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "PUT") {
|
||||
invokerUtil.put(uri, payload, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "DELETE") {
|
||||
invokerUtil.delete(uri, successCallBack, errorCallBack, contentType);
|
||||
} else {
|
||||
title.html("An Error Occurred!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-error");
|
||||
description.html("This operation requires http method: " + httpMethod + " which is not supported yet!");
|
||||
resetLoader();
|
||||
$(modalPopupContent).html(content.html());
|
||||
$(".modal #operation-error-msg span").text(validaterString);
|
||||
$(".modal #operation-error-msg").removeClass("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,6 +169,21 @@ var operationTypeConstants = {
|
||||
"COMMAND": "command"
|
||||
};
|
||||
|
||||
function validatePayload(operationCode, payload) {
|
||||
console.log(payload);
|
||||
var returnVal = "OK";
|
||||
switch (operationCode) {
|
||||
case "NOTIFICATION":
|
||||
if (!payload.messageText) {
|
||||
returnVal = "Message Body Can't be empty !";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
return returnVal;
|
||||
}
|
||||
|
||||
var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
var payload;
|
||||
@ -170,40 +193,40 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
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;
|
||||
@ -211,7 +234,7 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"lockCode" : operationData["lockCode"]
|
||||
"lockCode": operationData["lockCode"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
@ -219,7 +242,7 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"encrypted" : operationData["encryptStorageEnabled"]
|
||||
"encrypted": operationData["encryptStorageEnabled"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
@ -228,8 +251,8 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
payload = {
|
||||
"operation": {
|
||||
//"message" : operationData["message"]
|
||||
"messageText": operationData["messageText"],
|
||||
"messageTitle": operationData["messageTitle"]
|
||||
"messageTitle": operationData["messageTitle"],
|
||||
"messageText": operationData["messageText"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
@ -237,8 +260,8 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"schedule" : operationData["schedule"],
|
||||
"server" : operationData["server"]
|
||||
"schedule": operationData["schedule"],
|
||||
"server": operationData["server"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
@ -246,7 +269,7 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"pin" : operationData["pin"]
|
||||
"pin": operationData["pin"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
@ -255,15 +278,15 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
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;
|
||||
@ -282,8 +305,8 @@ var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"message" : operationData["lock-message"],
|
||||
"isHardLockEnabled" : operationData["hard-lock"]
|
||||
"message": operationData["lock-message"],
|
||||
"isHardLockEnabled": operationData["hard-lock"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
@ -375,39 +398,39 @@ var androidOperationConstants = {
|
||||
"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"
|
||||
};
|
||||
@ -106,13 +106,13 @@
|
||||
"formParams": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "messageText",
|
||||
"id": "messageTitle",
|
||||
"optional": false,
|
||||
"label": "Title Here..."
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "messageTitle",
|
||||
"id": "messageText",
|
||||
"optional": false,
|
||||
"label": "Message Here..."
|
||||
}
|
||||
|
||||
@ -20,7 +20,11 @@
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 add-padding-top-2x add-padding-bottom-2x">
|
||||
{{#if isVirtual}}
|
||||
<h3 class="text-center add-padding-bottom-4x">Download our virtual Android device, enroll it with WSO2
|
||||
Device Cloud and try it out!</h3>
|
||||
{{#if isCloud}}
|
||||
Device Cloud
|
||||
{{else}}
|
||||
IoT Server
|
||||
{{/if}}and try it out!</h3>
|
||||
<div class="text-center"><a
|
||||
href="{{@unit.publicUri}}/assets/android-tryit.ZIP"
|
||||
class="btn-operations remove-margin download_agent">
|
||||
@ -63,8 +67,12 @@
|
||||
</p>
|
||||
{{else}}
|
||||
<p class="doc-link text-center">Need help? Read <a
|
||||
href="https://docs.wso2.com/display/IoTS310/Android" target="_blank">WSO2
|
||||
IoT Server documentation.</a></p>
|
||||
{{#if isVirtual}}
|
||||
href="https://docs.wso2.com/display/IoTS310/Android+Virtual+Device"
|
||||
{{else}}
|
||||
href="https://docs.wso2.com/display/IoTS310/Android"
|
||||
{{/if}}
|
||||
target="_blank">WSO2 IoT Server documentation.</a></p>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
|
||||
@ -17,7 +17,8 @@
|
||||
~ under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
@ -35,6 +36,7 @@
|
||||
<modules>
|
||||
<module>org.wso2.carbon.device.mgt.mobile.android</module>
|
||||
<module>org.wso2.carbon.device.mgt.mobile.android.api</module>
|
||||
<module>org.wso2.carbon.device.mgt.mobile.android.emulator</module>
|
||||
<module>org.wso2.carbon.device.mgt.mobile.android.ui</module>
|
||||
</modules>
|
||||
|
||||
|
||||
@ -6,398 +6,89 @@
|
||||
{{#if deviceFound}}
|
||||
{{#if isAuthorized}}
|
||||
|
||||
{{#zone "device-thumbnail"}}
|
||||
<i class="fw fw-windows device-type fw-1x"></i>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details-header"}}
|
||||
<h1 class="page-sub-title device-id device-select"
|
||||
data-deviceid="{{device.deviceIdentifier}}" data-type="{{device.type}}"
|
||||
data-ownership="{{device.ownership}}"
|
||||
data-owner="{{device.owner}}" data-status="{{device.status}}">
|
||||
Device {{device.name}}
|
||||
{{#if device.model}}
|
||||
<span class="lbl-device">
|
||||
( {{device.vendor}} {{device.model}} )
|
||||
</span>
|
||||
{{/if}}
|
||||
<h1 class="device-id"
|
||||
data-deviceid="{{device.deviceIdentifier}}"
|
||||
data-type="{{device.type}}"
|
||||
data-ownership="{{device.ownership}}"
|
||||
data-owner="{{device.owner}}"
|
||||
data-status="{{device.status}}">
|
||||
{{device.owner}}'s {{device.name}}
|
||||
<a id="device-info-tooltip" href="#" data-toggle="tooltip" title="Device Identifier: {{device.deviceIdentifier}}
|
||||
Firmware Build Date: {{device.osBuildDate}}
|
||||
UDID: {{device.udid}}">
|
||||
<i class="fw fw-info"></i>
|
||||
</a>
|
||||
</h1>
|
||||
{{#if device.model}}
|
||||
<h4>{{device.vendor}} {{device.model}}</h4>
|
||||
{{/if}}
|
||||
<h4>Ownership - <strong>{{device.ownership}}</strong></h4>
|
||||
<h4>Device is
|
||||
<strong>
|
||||
{{#equal device.status "ACTIVE"}}Active{{/equal}}
|
||||
{{#equal device.status "INACTIVE"}}Inactive{{/equal}}
|
||||
{{#equal device.status "BLOCKED"}}Blocked{{/equal}}
|
||||
{{#equal device.status "REMOVED"}}Removed{{/equal}}
|
||||
{{#equal device.status "UNREACHABLE"}}Unreachable{{/equal}}
|
||||
</strong>
|
||||
</h4>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "overview-section"}}
|
||||
<div class="media-body asset-desc add-padding-left-5x">
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Device
|
||||
Overview
|
||||
</div>
|
||||
<table class="table table-responsive table-striped" id="members">
|
||||
<tbody>
|
||||
{{#if device.deviceIdentifier}}
|
||||
<tr role="row" class="odd">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Device ID</td>
|
||||
<td style="padding:10px 15px;">{{device.deviceIdentifier}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.name}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Name</td>
|
||||
<td style="padding:10px 15px;">{{device.name}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.vendor}}
|
||||
{{#if device.model}}
|
||||
<tr role="row" class="odd">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Model</td>
|
||||
<td style="padding:10px 15px;">{{device.vendor}}
|
||||
{{device.model}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if device.status}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Status</td>
|
||||
<td style="padding:10px 15px;">
|
||||
{{#if permissions.CHANGE_DEVICE_STATUS}}
|
||||
{{#equal device.status "ACTIVE"}}<span><i id="statusIcon"
|
||||
class="fw fw-success icon-success"></i>
|
||||
<a href="#" id="status" data-type="select" data-pk="1"
|
||||
data-title="Select status"
|
||||
selectedValue="Active"></a>
|
||||
</span>{{/equal}}
|
||||
{{#equal device.status "INACTIVE"}}<span><i id="statusIcon"
|
||||
class="fw fw-warning icon-warning"></i>
|
||||
<a href="#" id="status" data-type="select" data-pk="1"
|
||||
data-title="Select status"
|
||||
selectedValue="Inactive"></a>
|
||||
</span>{{/equal}}
|
||||
{{#equal device.status "BLOCKED"}}<span><i id="statusIcon"
|
||||
class="fw fw-remove icon-danger"></i>
|
||||
<a href="#" id="status" data-type="select" data-pk="1"
|
||||
data-title="Select status"
|
||||
selectedValue="Blocked"></a>
|
||||
</span>{{/equal}}
|
||||
{{#equal device.status "REMOVED"}}<span><i id="statusIcon"
|
||||
class="fw fw-delete icon-danger"></i>
|
||||
<a href="#" id="status" data-type="select" data-pk="1"
|
||||
data-title="Select status"
|
||||
selectedValue="Removed"></a>
|
||||
</span>{{/equal}}
|
||||
{{else}}
|
||||
{{#equal device.status "ACTIVE"}}<span><i
|
||||
class="fw fw-success icon-success"></i> Active</span>{{/equal}}
|
||||
{{#equal device.status "INACTIVE"}}<span><i
|
||||
class="fw fw-warning icon-warning"></i> Inactive</span>{{/equal}}
|
||||
{{#equal device.status "BLOCKED"}}<span><i
|
||||
class="fw fw-remove icon-danger"></i> Blocked</span>{{/equal}}
|
||||
{{#equal device.status "REMOVED"}}<span><i
|
||||
class="fw fw-delete icon-danger"></i> Removed</span>{{/equal}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.owner}}
|
||||
<tr role="row" class="odd">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Owner</td>
|
||||
<td style="padding:10px 15px;">{{device.owner}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.ownership}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Ownership</td>
|
||||
<td style="padding:10px 15px;">{{device.ownership}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.imei}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">IMEI</td>
|
||||
<td style="padding:10px 15px;">{{device.imei}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.udid}}
|
||||
<tr role="row" class="odd">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">UDID</td>
|
||||
<td style="padding:10px 15px;">{{device.udid}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.osBuildDate}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Firmware Build
|
||||
Date
|
||||
</td>
|
||||
<td style="padding:10px 15px;">{{device.osBuildDate}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.phoneNumber}}
|
||||
<tr role="row" class="odd">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Phone Number</td>
|
||||
<td style="padding:10px 15px;">{{device.phoneNumber}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
{{#if device.lastUpdatedTime}}
|
||||
<tr role="row" class="even">
|
||||
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Last Update</td>
|
||||
<td style="padding:10px 15px;">{{device.lastUpdatedTime}}</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
|
||||
{{#zone "device-opetations"}}
|
||||
{{#if device.isNotRemoved}}
|
||||
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
||||
Operations
|
||||
</div>
|
||||
<div class="add-margin-top-4x">
|
||||
{{unit "cdmf.unit.device.type.windows.new.operation-bar" device=device
|
||||
backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}}
|
||||
<div class="operation-container">
|
||||
<div class="operation-title">
|
||||
<h4>Device Operations</h4>
|
||||
</div>
|
||||
{{unit "cdmf.unit.device.type.windows.new.operation-bar" device=device
|
||||
backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details-tab-injected"}}
|
||||
<li role="presentation" class="list-group-item">
|
||||
<a href="#policy_compliance_tab" role="tab" data-toggle="tab"
|
||||
aria-controls="policy_compliance_tab">
|
||||
<i class="icon fw fw-policy"></i><span class="hidden-sm">Policy Compliance</span>
|
||||
</a>
|
||||
</li>
|
||||
<li role="presentation" class="list-group-item">
|
||||
<a href="#device_location_tab" role="tab" data-toggle="tab"
|
||||
data-lat="{{device.location.latitude}}"
|
||||
data-long="{{device.location.longitude}}"
|
||||
aria-controls="device_location_tab">
|
||||
<i class="icon fw fw-map-location"></i><span
|
||||
class="hidden-sm">Device Location</span>
|
||||
</a>
|
||||
</li>
|
||||
<!--li role="presentation" class="list-group-item">
|
||||
<a href="#installed_applications_tab" role="tab" data-toggle="tab"
|
||||
aria-controls="installed_applications_tab">
|
||||
<i class="icon fw fw-application"></i><span class="hidden-sm">Installed Applications</span>
|
||||
</a>
|
||||
</li-->
|
||||
{{#zone "device-details"}}
|
||||
<div class="vital-strip">
|
||||
{{#if device.deviceInfoAvailable}}
|
||||
{{#if device.BatteryLevel}}
|
||||
<p><i class="icon fw fw-battery fw-2x"></i> <span>{{device.BatteryLevel.value}}%</span></p>
|
||||
{{/if}}
|
||||
{{#if device.ramUsage}}
|
||||
<p><i class="icon fw fw-hardware fw-2x fw-rotate-90"></i> <span>{{device.ramUsage.value}} MB</span></p>
|
||||
{{/if}}
|
||||
{{#if device.internalMemory}}
|
||||
<p><i class="icon fw fw-hdd fw-2x fw-rotate-90"></i> <span>{{device.internalMemory.value}} GB</span>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<p>Battery, RAM and Storage related information are not
|
||||
available yet.</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-details-tab-contents"}}
|
||||
<div class="panel panel-default" role="tabpanel" id="device_details_tab">
|
||||
<div class="panel-heading visible-xs collapsed" id="device_details">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||
href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
<i class="fw fw-mobile fw-2x"></i>
|
||||
Device Details
|
||||
<i class="caret-updown fw fw-down"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-heading display-none-xs">Device Details</div>
|
||||
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel"
|
||||
aria-labelledby="device_details">
|
||||
<div class="panel-body ">
|
||||
<div class="device-detail-body">
|
||||
<!-- device summary -->
|
||||
{{#if device.deviceInfoAvailable}}
|
||||
<!--{{#if device.BatteryLevel}}-->
|
||||
<!--<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">-->
|
||||
<!--<div class="col-md-12">-->
|
||||
<!--<div class="wr-stats-board-tile">-->
|
||||
<!--<div class="tile-name">Remaining BATTERY</div>-->
|
||||
<!--<div>-->
|
||||
<!--<div class="tile-icon"><i-->
|
||||
<!--class="fw fw-battery"></i></div>-->
|
||||
<!--<div class="tile-stats">-->
|
||||
<!--{{device.BatteryLevel.value}}-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--{{/if}}-->
|
||||
<!--{{#if device.cpuUsage}}-->
|
||||
<!--<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">-->
|
||||
<!--<div class="col-md-12">-->
|
||||
<!--<div class="wr-stats-board-tile">-->
|
||||
<!--<div class="tile-name">CPU Usage</div>-->
|
||||
<!--<div>-->
|
||||
<!--<div class="tile-icon"><i class="fw fw-dashboard"></i></div>-->
|
||||
<!--<div class="tile-stats">-->
|
||||
<!--{{device.cpuUsage.value}} %-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--{{/if}}-->
|
||||
{{#if device.ramUsage}}
|
||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||
<div class="col-md-12">
|
||||
<div class="wr-stats-board-tile">
|
||||
<div class="tile-name">Available RAM</div>
|
||||
<div>
|
||||
<div class="tile-icon"><i
|
||||
class="fw fw-hardware"></i></div>
|
||||
<div class="tile-stats">
|
||||
{{device.ramUsage
|
||||
.value}} MB
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if device.internalMemory}}
|
||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||
<div class="col-md-12">
|
||||
<div class="wr-stats-board-tile">
|
||||
<div class="tile-name">Available Local Storage</div>
|
||||
<div>
|
||||
<div class="tile-icon"><i
|
||||
class="fw fw-hdd"></i>
|
||||
</div>
|
||||
<div class="tile-stats">
|
||||
{{device.internalMemory
|
||||
.value}} GB
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="message message-info">
|
||||
<h4 class="remove-margin">
|
||||
<i class="icon fw fw-info"></i>
|
||||
Battery, RAM and Storage related information are not
|
||||
available yet.
|
||||
</h4>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{#zone "device-details-tab-injected"}}
|
||||
<li><a data-toggle="tab" href="#location">Location</a></li>
|
||||
<li><a data-toggle="tab" href="#app">Applications</a></li>
|
||||
<li><a data-toggle="tab" href="#policy">Policy Compliance</a></li>
|
||||
{{/zone}}
|
||||
|
||||
{{#zone "device-view-tab-injected-conents"}}
|
||||
<div class="panel panel-default visible-xs-block" role="tabpanel"
|
||||
id="policy_compliance_tab">
|
||||
<div class="panel-heading visible-xs collapsed" id="policy_compliance">
|
||||
<h4 class="panel-title">
|
||||
<a role="button"
|
||||
data-toggle="collapse" data-parent="#tabs" href="#collapseTwo"
|
||||
aria-expanded="true" aria-controls="collapseTwo">
|
||||
<i class="fw fw-policy fw-2x"></i>
|
||||
Policy Compliance
|
||||
<i class="caret-updown fw fw-down"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-heading display-none-xs">
|
||||
Policy Compliance
|
||||
|
||||
<span>
|
||||
<a href="javascript:void(0);" id="refresh-policy">
|
||||
<i class="fw fw-refresh"></i>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel"
|
||||
aria-labelledby="policy_compliance">
|
||||
<div class="panel-body ">
|
||||
<span class="visible-xs add-padding-2x text-right">
|
||||
<a href="javascript:void(0);" id="refresh-policy">
|
||||
<i class="fw fw-refresh"></i>
|
||||
</a>
|
||||
</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>Loading Policy
|
||||
Compliance...
|
||||
</div>
|
||||
<div id="policy-list-container">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="location" class="tab-pane fade ">
|
||||
<iframe width="100%" height="100%" frameborder="0" style="border:0"
|
||||
src="https://www.google.com/maps/embed/v1/place?q=place_id:ChIJk_gsqyVZ4joR4UxR7brwMnA&key=AIzaSyChgf100i4rBz6neCNRyK1D05g9VLY8jvo" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default visible-xs-block" role="tabpanel"
|
||||
id="device_location_tab">
|
||||
<div class="panel-heading visible-xs collapsed" id="device_location">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||
href="#collapseThree" aria-expanded="true" aria-controls="collapseThree">
|
||||
<i class="fw fw-map-location fw-2x"></i>
|
||||
Device Location
|
||||
<i class="caret-updown fw fw-down"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-heading display-none-xs">Device Location</div>
|
||||
<div id="collapseThree" class="panel-collapse collapse in" role="tabpanel"
|
||||
aria-labelledby="device_location">
|
||||
<div class="panel-body">
|
||||
{{#if device.location}}
|
||||
<div id="device-location"
|
||||
data-lat="{{device.location.latitude}}"
|
||||
data-long="{{device.location.longitude}}">
|
||||
</div>
|
||||
{{else}}
|
||||
<div id="map-error" class="message message-warning">
|
||||
<h4 class="remove-margin">
|
||||
<i class="icon fw fw-warning"></i>
|
||||
Device location information is not available.
|
||||
</h4>
|
||||
</div>
|
||||
<p class="add-padding-5x"></p>
|
||||
<p class="add-padding-5x"></p>
|
||||
<p class="add-padding-5x"></p>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div id="app" class="tab-pane fade">
|
||||
<div id="applications-list-container" data-public-uri="{{@unit.publicUri}}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default visible-xs-block" role="tabpanel"
|
||||
id="installed_applications_tab">
|
||||
<div class="panel-heading visible-xs collapsed" id="installed_applications">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#tabs"
|
||||
href="#collapseFour" aria-expanded="true" aria-controls="collapseFour">
|
||||
<i class="fw fw-application fw-2x"></i>
|
||||
Installed Applications
|
||||
<i class="caret-updown fw fw-down"></i>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-heading display-none-xs">
|
||||
Installed Applications
|
||||
|
||||
<span>
|
||||
<a href="javascript:void(0);" id="refresh-apps">
|
||||
<i class="fw fw-refresh"></i>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div id="collapseFour" class="panel-collapse collapse in" role="tabpanel"
|
||||
aria-labelledby="installed_applications">
|
||||
<div class="panel-body">
|
||||
<span class="visible-xs add-padding-2x text-right">
|
||||
<a href="javascript:void(0);" id="refresh-apps">
|
||||
<i class="fw fw-refresh"></i>
|
||||
</a>
|
||||
</span>
|
||||
<div id="apps-spinner" class="wr-advance-operations-init hidden">
|
||||
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Applications
|
||||
List...
|
||||
</div>
|
||||
<div id="applications-list-container">
|
||||
<div class="message message-info">
|
||||
<h4>
|
||||
<i class="icon fw fw-info"></i>
|
||||
No applications found.
|
||||
</h4>
|
||||
<p>Please try refreshing in a while.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="policy" class="tab-pane fade">
|
||||
<div id="policy-list-container">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{/zone}}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 7.3 KiB |
@ -291,6 +291,8 @@ var InitiateViewOption = null;
|
||||
viewModel["appContext"] = context;
|
||||
var content = template(viewModel);
|
||||
$("#applications-list-container").html(content);
|
||||
var iconSource = $("#applications-list-container").data("public-uri") + "/img/device_icons/windows_app_icon.png";
|
||||
$("#applications-list-container img").attr("src",iconSource);
|
||||
} else {
|
||||
$("#applications-list-container").
|
||||
html("<div class='message message-info'><h4><i class='icon fw fw-info'></i>No applications found.</h4>" +
|
||||
|
||||
@ -1,31 +1,9 @@
|
||||
<div class="wr-app-listing">
|
||||
<div class="wr-applist">
|
||||
{{#each applications}}
|
||||
<a style="text-align: center; width: 110px; height: 140px;">
|
||||
{{#equal platform "android"}}<i class="icon fw fw-android"></i>{{/equal}}
|
||||
{{#equal platform "ios"}}<i class="icon fw fw-apple"></i>{{/equal}}
|
||||
{{#equal platform "windows"}}<i class="icon fw fw-windows"></i>{{/equal}}
|
||||
{{#equal isActive true}}
|
||||
<span style="word-wrap: break-word;">
|
||||
<i class="fw fw-success icon-success" style="font-size: 14px;"></i>
|
||||
Active
|
||||
</span>
|
||||
<span style="word-wrap: break-word;"><b>{{name}}</b></span>
|
||||
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
||||
{{#if memoryUsage}}
|
||||
<span style="word-wrap: break-word;">
|
||||
Memory Usage
|
||||
</span>
|
||||
<span style="word-wrap: break-word;">
|
||||
( {{memoryUsage}} Bytes )
|
||||
</span>
|
||||
{{/if}}
|
||||
{{/equal}}
|
||||
{{#equal isActive false}}
|
||||
<span style="word-wrap: break-word;">{{name}}</span>
|
||||
<span style="word-wrap: break-word;"><b>V:{{version}}</b></span>
|
||||
{{/equal}}
|
||||
</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
{{#each applications}}
|
||||
<div class="application">
|
||||
<img src="">
|
||||
<div class="app-info">
|
||||
<h4>{{name}}</h4>
|
||||
<p>v{{version}}</p>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
@ -1,61 +1,27 @@
|
||||
<div class="wr-list-group wr-sortable policy-list">
|
||||
<span class="list-group-item" id="{{id}}">
|
||||
<div class="row">
|
||||
<div class="col-lg-3 clearfix">
|
||||
<span class="wr-list-icon">
|
||||
{{#equal deviceType "android"}}
|
||||
<i class=" fw fw-android"></i>
|
||||
{{/equal}}
|
||||
{{#equal deviceType "ios"}}
|
||||
<i class=" fw fw-apple"></i>
|
||||
{{/equal}}
|
||||
{{#equal deviceType "windows"}}
|
||||
<i class=" fw fw-windows"></i>
|
||||
{{/equal}}
|
||||
</span>
|
||||
<span class="wr-list-desc">
|
||||
<h3 class="wr-list-name">{{policy.policyName}}</h3>
|
||||
<span class="wr-list-username">{{deviceType}}</span>
|
||||
</span>
|
||||
<div class="policy-item">
|
||||
{{#equal compliance "COMPLIANT"}}
|
||||
<i class="icon fw fw-success fw-3x policy-status"></i>
|
||||
{{/equal}}
|
||||
{{#equal compliance "NON-COMPLIANT"}}
|
||||
<i class="icon fw fw-warning fw-3x policy-status"></i>
|
||||
{{/equal}}
|
||||
<p>
|
||||
<span class="policy-name">{{policy.policyName}}</span>
|
||||
<span class="policy-platform">{{deviceType}}</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="comp-type">Compliance Type : <strong>{{policy.compliance}}</strong></span>
|
||||
<span class="ownership-type">Ownership type : <strong>{{policy.ownershipType}}</strong></span>
|
||||
</p>
|
||||
<div class="actions">
|
||||
<div class="action-btn ripple">
|
||||
<p><a href="{{appContext}}/policy/effective-policy?type={{deviceType}}&id={{deviceId}}">
|
||||
<i class="icon fw fw-view fw-2x"></i> <span>View Policy </span></a></p>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="row no-gutter">
|
||||
<div class="wr-desc-list-configs col-lg-4">
|
||||
<div>
|
||||
<b>Ownership Type : </b> {{policy.ownershipType}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="wr-desc-list-configs col-lg-4">
|
||||
<div>
|
||||
<b>Compliance Type :</b> {{policy.compliance}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="wr-desc-list-configs col-lg-4">
|
||||
<div>
|
||||
<b>Compliance :</b>
|
||||
{{#equal compliance "COMPLIANT"}}
|
||||
<span><i class="fw fw-success icon-success"></i> Compliant</span>
|
||||
{{/equal}}
|
||||
{{#equal compliance "NON-COMPLIANT"}}
|
||||
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
|
||||
{{/equal}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<span class="list-group-item-actions">
|
||||
<a href="{{appContext}}/policy/effective-policy?type={{deviceType}}&id={{deviceId}}" class="cu-btn-inner policy-view-link" data-id="{{id}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-view fw-stack-1x"></i>
|
||||
</span>
|
||||
View
|
||||
</a>
|
||||
</span>
|
||||
<div class="action-btn ripple">
|
||||
<p><i class="icon fw fw-refresh fw-2x fw-flip-horizontal"></i> <span>Revoke Policy </span></p>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
<table class="table table-striped table-hover table-bordered display data-table" id="policy-compliance-table">
|
||||
<thead>
|
||||
|
||||
114
pom.xml
114
pom.xml
@ -17,7 +17,8 @@
|
||||
~ under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
@ -355,11 +356,11 @@
|
||||
<artifactId>org.wso2.carbon.event.output.adapter.core</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.event.input.adapter.wso2event</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.event.input.adapter.wso2event</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.event.input.adapter.core</artifactId>
|
||||
@ -370,21 +371,21 @@
|
||||
<artifactId>org.wso2.carbon.databridge.commons</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.databridge.commons.thrift</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.databridge.commons.binary</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.databridge.core</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.databridge.commons.thrift</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.databridge.commons.binary</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||
<artifactId>org.wso2.carbon.databridge.core</artifactId>
|
||||
<version>${carbon.analytics.common.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.analytics</groupId>
|
||||
<artifactId>org.wso2.carbon.analytics.api</artifactId>
|
||||
@ -407,11 +408,11 @@
|
||||
<artifactId>org.wso2.carbon.device.mgt.output.adapter.mqtt</artifactId>
|
||||
<version>${carbon.devicemgt.plugins.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.input.adapter.thrift</artifactId>
|
||||
<version>${carbon.devicemgt.plugins.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.input.adapter.thrift</artifactId>
|
||||
<version>${carbon.devicemgt.plugins.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.output.adapter.xmpp</artifactId>
|
||||
@ -547,16 +548,16 @@
|
||||
<groupId>org.wso2.carbon.appmgt</groupId>
|
||||
<artifactId>org.wso2.carbon.appmgt.mobile</artifactId>
|
||||
<version>${carbon.appmgt.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-impl</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.ws.commons.axiom</groupId>
|
||||
<artifactId>axiom-impl</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!--Osgi dependencies-->
|
||||
@ -817,11 +818,11 @@
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
<version>${orbit.version.commons-httpclient}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec.wso2</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>${commons-codec.version.wso2}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec.wso2</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>${commons-codec.version.wso2}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
@ -982,11 +983,11 @@
|
||||
<version>${identity.inbound.auth.oauth.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.identity.carbon.auth.jwt</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.authenticator.signedjwt</artifactId>
|
||||
<version>${identity.carbon.auth.jwt.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.identity.carbon.auth.jwt</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.authenticator.signedjwt</artifactId>
|
||||
<version>${identity.carbon.auth.jwt.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents.wso2</groupId>
|
||||
<artifactId>httpcore</artifactId>
|
||||
@ -1080,11 +1081,11 @@
|
||||
<artifactId>feign-gson</artifactId>
|
||||
<version>${io.github.openfeign.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.github.openfeign</groupId>
|
||||
<artifactId>feign-slf4j</artifactId>
|
||||
<version>${io.github.openfeign.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.github.openfeign</groupId>
|
||||
<artifactId>feign-slf4j</artifactId>
|
||||
<version>${io.github.openfeign.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- dependencies for siddhi extension -->
|
||||
<dependency>
|
||||
@ -1146,7 +1147,7 @@
|
||||
<javax.ws.rs.version>1.1.1</javax.ws.rs.version>
|
||||
|
||||
<!-- Carbon Device Management -->
|
||||
<carbon.devicemgt.version>3.0.8-SNAPSHOT</carbon.devicemgt.version>
|
||||
<carbon.devicemgt.version>3.0.8</carbon.devicemgt.version>
|
||||
<carbon.devicemgt.version.range>[3.0.0, 4.0.0)</carbon.devicemgt.version.range>
|
||||
|
||||
<!-- Carbon App Management -->
|
||||
@ -1165,7 +1166,7 @@
|
||||
<carbon.identity.framework.version>5.6.89</carbon.identity.framework.version>
|
||||
<identity.inbound.auth.oauth.version>5.3.1</identity.inbound.auth.oauth.version>
|
||||
<carbon.identity.version.range>[5.2.0, 6.0.0)</carbon.identity.version.range>
|
||||
<identity.carbon.auth.jwt.version>5.1.2</identity.carbon.auth.jwt.version>
|
||||
<identity.carbon.auth.jwt.version>5.1.2</identity.carbon.auth.jwt.version>
|
||||
|
||||
<!-- Carbon Multi-tenancy -->
|
||||
<carbon.multitenancy.version>4.6.1</carbon.multitenancy.version>
|
||||
@ -1232,7 +1233,7 @@
|
||||
|
||||
<commons-json.version>3.0.0.wso2v1</commons-json.version>
|
||||
<commons-json.version.range>(3.0.0, 4.0.0]</commons-json.version.range>
|
||||
<orbit.version.json.range>[2.0.0,4.0.0)</orbit.version.json.range>
|
||||
<orbit.version.json.range>[2.0.0,4.0.0)</orbit.version.json.range>
|
||||
<json.path.version>0.9.1</json.path.version>
|
||||
<json-simple.version>1.1.wso2v1</json-simple.version>
|
||||
<commons-collections.version>3.2.2</commons-collections.version>
|
||||
@ -1389,6 +1390,11 @@
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user