diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/android-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/android-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk index de63c0634..e21252790 100644 Binary files a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/android-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk and b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/android-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk differ diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs index 0577d7482..189bcf087 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/device-view.hbs @@ -1,5 +1,4 @@ {{unit "cdmf.unit.device.type.android.leaflet"}} -{{unit "cdmf.unit.lib.editable"}} {{unit "cdmf.unit.lib.qrcode"}} {{unit "cdmf.unit.device.type.qr-modal"}} @@ -52,41 +51,16 @@ Status - {{#if permissions.CHANGE_DEVICE_STATUS}} - {{#equal device.status "ACTIVE"}} - - {{/equal}} - {{#equal device.status "INACTIVE"}} - - {{/equal}} - {{#equal device.status "BLOCKED"}} - - {{/equal}} - {{#equal device.status "REMOVED"}} - - {{/equal}} - {{else}} - {{#equal device.status "ACTIVE"}} Active{{/equal}} - {{#equal device.status "INACTIVE"}} Inactive{{/equal}} - {{#equal device.status "BLOCKED"}} Blocked{{/equal}} - {{#equal device.status "REMOVED"}} Removed{{/equal}} - {{/if}} + {{#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}} {{/if}} @@ -147,7 +121,7 @@
{{unit "cdmf.unit.device.type.android.operation-bar" device=device - backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}} + backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}}
{{/if}} {{/zone}} @@ -356,7 +330,17 @@ - +
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js index 0d41ff274..4399b6152 100755 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/device-detail.js @@ -35,6 +35,37 @@ var InitiateViewOption = null; serviceUrl = "/api/device-mgt/android/v1.0/admin/devices/info"; serviceUrlLocal = "/api/device-mgt/android/v1.0/admin/devices/location"; } + if (serviceUrl) { + invokerUtil.post( + serviceUrl, + payload, + // success-callback + function () { + $(".panel-body").show(); + }, + // error-callback + function () { + var defaultInnerHTML = + "

Device data may not have been updated. Please refresh to try again.

"; + $(".panel-body").append(defaultInnerHTML); + } + ); + invokerUtil.post( + serviceUrlLocal, + payload, + // success-callback + function () { + $(".panel-body").show(); + }, + // error-callback + function () { + var defaultInnerHTML = + "

Device data may not have been updated. Please refresh to try again.

"; + $(".panel-body").append(defaultInnerHTML); + } + ); + + } $(".media.tab-responsive [data-toggle=tab]").on("shown.bs.tab", function (e) { var activeTabPane = $(e.target).attr("href"); @@ -55,12 +86,12 @@ var InitiateViewOption = null; }); - $('.media.tab-responsive a[data-toggle="collapse"]').on('click',function(){ + $('.media.tab-responsive a[data-toggle="collapse"]').on('click', function () { var clickedPanel = $(this).attr('href'); - if($(clickedPanel).hasClass('in')){ + if ($(clickedPanel).hasClass('in')) { $(clickedPanel).collapse('hide'); - }else{ + } else { $(clickedPanel).collapse('show'); } }); @@ -130,26 +161,26 @@ var InitiateViewOption = null; var parentHeight = $(arrow).parent().innerHeight(); - if($(selectedTab).prev().length){ - $(selectedTab).prevAll().each(function() { + if ($(selectedTab).prev().length) { + $(selectedTab).prevAll().each(function () { totalHeight += $(this).innerHeight(); }); arrowPosition = totalHeight + (selectedTabHeight / 2); - }else{ + } else { arrowPosition = selectedTabHeight / 2; } - if(arrowPosition >= parentHeight){ + if (arrowPosition >= parentHeight) { parentHeight = arrowPosition + 50; $(arrow).siblings(".panel.active").height(parentHeight); - }else{ + } else { $(arrow).parent().removeAttr("style"); } $(arrow).css("top", arrowPosition - 10); } - $(document).ready(function() { + $(document).ready(function () { $(".device-detail-body").removeClass("hidden"); $("#loading-content").remove(); loadApplicationsList(); @@ -165,7 +196,7 @@ var InitiateViewOption = null; loadApplicationsList(); }); }); - + function loadOperationsLog(update) { var owner = $("#device-owner").data("owner"); var operationsLogTable = "#operations-log-table"; @@ -178,12 +209,12 @@ var InitiateViewOption = null; serverSide: true, processing: false, searching: false, - ordering: false, - pageLength : 10, + ordering: false, + pageLength: 10, order: [], ajax: { url: "/devicemgt/api/operation/paginate", - data: {deviceId : deviceIdentifier, deviceType: deviceType, owner:owner}, + data: {deviceId: deviceIdentifier, deviceType: deviceType, owner: owner}, dataSrc: function (json) { $("#operations-spinner").addClass("hidden"); $("#operations-log-container").empty(); @@ -191,43 +222,43 @@ var InitiateViewOption = null; } }, columnDefs: [ - {targets: 0, data: "code" }, - {targets: 1, data: "status", render: - function (status) { - var html; - switch (status) { - case "COMPLETED" : - html = " Completed"; - break; - case "PENDING" : - html = " Pending"; - break; - case "ERROR" : - html = " Error"; - break; - case "IN_PROGRESS" : - html = " In Progress"; - break; - case "REPEATED" : - html = " Repeated"; - break; - } - return html; + {targets: 0, data: "code"}, + { + targets: 1, data: "status", render: function (status) { + var html; + switch (status) { + case "COMPLETED" : + html = " Completed"; + break; + case "PENDING" : + html = " Pending"; + break; + case "ERROR" : + html = " Error"; + break; + case "IN_PROGRESS" : + html = " In Progress"; + break; + case "REPEATED" : + html = " Repeated"; + break; } + return html; + } }, - {targets: 2, data: "createdTimeStamp", render: - function (date) { - var value = String(date); - return value.slice(0, 16); - } + { + targets: 2, data: "createdTimeStamp", render: function (date) { + var value = String(date); + return value.slice(0, 16); + } } ], - "createdRow": function(row, data) { + "createdRow": function (row, data) { $(row).attr("data-type", "selectable"); $(row).attr("data-id", data["id"]); $.each($("td", row), - function(colIndex) { - switch(colIndex) { + function (colIndex) { + switch (colIndex) { case 1: $(this).attr("data-grid-label", "Code"); $(this).attr("data-display", data["code"]); @@ -276,18 +307,16 @@ var InitiateViewOption = null; var content = template(viewModel); $("#applications-list-container").html(content); } else { - $("#applications-list-container"). - html("

No applications found.

" + - "

Please try refreshing the list in a while.

"); + $("#applications-list-container").html("

No applications found.

" + + "

Please try refreshing the list in a while.

"); } } }, // error-callback function () { - $("#applications-list-container"). - html("

 Loading application list " + - "was not successful. please try refreshing the list in a while.

"); - }); + $("#applications-list-container").html("

 Loading application list " + + "was not successful. please try refreshing the list in a while.

"); + }); }); } @@ -338,17 +367,15 @@ var InitiateViewOption = null; $("#policy-compliance-table").addClass("hidden"); } } else { - $("#policy-list-container"). - html("

This device " + - "has no policy applied.

"); + $("#policy-list-container").html("

This device " + + "has no policy applied.

"); } } }, // error-callback function () { - $("#policy-list-container"). - html("

Loading policy compliance related data " + - "was not successful. please try refreshing data in a while.

"); + $("#policy-list-container").html("

Loading policy compliance related data " + + "was not successful. please try refreshing data in a while.

"); } ); } @@ -356,9 +383,8 @@ var InitiateViewOption = null; }, // error-callback function () { - $("#policy-list-container"). - html("

Loading policy compliance related data " + - "was not successful. please try refreshing data in a while.

"); + $("#policy-list-container").html("

Loading policy compliance related data " + + "was not successful. please try refreshing data in a while.

"); } ); } diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js index af0d1e5d8..49318af68 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.device-view/public/js/load-map.js @@ -17,8 +17,10 @@ */ var map; +var isAnalitics = false; +var marker; -function loadLeafletMap() { +function loadLeafletMap(refresh) { var deviceLocationID = "#device-location", locations = $(deviceLocationID).data("locations"), @@ -28,8 +30,48 @@ function loadLeafletMap() { zoomLevel = 13, tileSet = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", attribution = "© OpenStreetMap contributors"; - if (locations && locations.locations.length > 0) { + if (refresh && !isAnalitics) { + + $("#map-spinner").removeClass("hidden"); + var applicationsList = $("#applications-list"); + var deviceId = applicationsList.data("device-id"); + var deviceType = applicationsList.data("device-type"); + invokerUtil.get( + "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/location", + // success-callback + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200 && data) { + data = JSON.parse(data); + if (data.latitude && data.longitude) { + map.removeLayer(marker); + // marker = L.marker([6.912853, 79.855635], {"opacity": opacVal}).addTo(map).bindPopup("Your device is here"); + marker = L.marker([data.latitude, data.longitude], {"opacity": opacVal}).addTo(map).bindPopup("Your device is here"); + map.panTo(new L.LatLng(data.latitude, data.longitude)); + // map.panTo(new L.LatLng(40.737, -73.923)); + marker.on('mouseover', function (e) { + this.openPopup(); + }); + marker.on('mouseout', function (e) { + this.closePopup(); + }); + } + $("#map-spinner").addClass("hidden"); + } else { + $("#map-spinner").adddClass("hidden"); + $("#device-location").hide(); + $("#map-error").show(); + } + }, + // error-callback + function () { + $("#map-spinner").addClass("hidden"); + $("#device-location").hide(); + $("#map-error").show(); + }); + + } else if (locations && locations.locations.length > 0) { + isAnalitics = true; var locationSets = locations.locations; map = L.map(container).setView([locationSets[0].lat, locationSets[0].lng], zoomLevel); L.tileLayer(tileSet, {attribution: attribution}).addTo(map); @@ -48,23 +90,26 @@ function loadLeafletMap() { } $("#map-error").hide(); $("#device-location").show(); - setTimeout(function(){ map.invalidateSize()}, 400); + setTimeout(function () { + map.invalidateSize() + }, 400); } else if (location_long && location_lat) { - map = L.map(container).setView([location_lat, location_long], zoomLevel); L.tileLayer(tileSet, {attribution: attribution}).addTo(map); - var m = L.marker([location_lat, location_long], {"opacity": opacVal}).addTo(map).bindPopup("Your device is here"); - m.on('mouseover', function (e) { + marker = L.marker([location_lat, location_long], {"opacity": opacVal}).addTo(map).bindPopup("Your device is here"); + marker.on('mouseover', function (e) { this.openPopup(); }); - m.on('mouseout', function (e) { + marker.on('mouseout', function (e) { this.closePopup(); }); $("#map-error").hide(); $("#device-location").show(); - setTimeout(function(){ map.invalidateSize()}, 400); + setTimeout(function () { + map.invalidateSize() + }, 400); } else { $("#device-location").hide(); $("#map-error").show(); @@ -73,6 +118,10 @@ function loadLeafletMap() { $(document).ready(function () { $(".location_tab").on("click", function () { - loadLeafletMap(); + loadLeafletMap(false); + }); + + $("#refresh-location").on("click", function () { + loadLeafletMap(true); }); }); diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/operation-bar.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/operation-bar.hbs index 3a5a60956..5e46d0009 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/operation-bar.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/operation-bar.hbs @@ -65,48 +65,54 @@ {{description}}
- -
- {{#each params.0.pathParams}} - -
- {{/each}} - {{#each params.0.formParams}} - -
- {{/each}} - {{#each params.0.queryParams}} - -
- {{/each}} - {{#each uiParams}} - {{#equal this.type "checkbox"}} - - {{this.label}} +
+ + {{#each params.0.pathParams}} + +
+ {{/each}} + {{#each params.0.formParams}} +
- {{/equal}} - {{#equal this.type "text"}} - + {{/each}} + {{#each params.0.queryParams}} +
- {{/equal}} - {{/each}} - - - - + {{/each}} + {{#each uiParams}} + {{#equal this.type "checkbox"}} + + {{this.label}} +
+ {{/equal}} + {{#equal this.type "text"}} + +
+ {{/equal}} + {{/each}} + + + + + +
diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/public/js/operation-bar.js b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/public/js/operation-bar.js index a5ab32d77..8b621e931 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/public/js/operation-bar.js +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.operation-bar/public/js/operation-bar.js @@ -28,6 +28,8 @@ function operationSelect(selection) { } function submitForm(formId) { + $("#btnSend").addClass("hidden"); + $("#lbl-execution").removeClass("hidden"); var form = $("#" + formId); var uri = form.attr("action"); var deviceId = form.data("device-id"); @@ -69,6 +71,12 @@ function submitForm(formId) { 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 { @@ -79,11 +87,12 @@ function submitForm(formId) { title.html("Operation Triggered!"); statusIcon.attr("class", defaultStatusClasses + " fw-check"); description.html(res); - console.log("success!"); + // console.log("success!"); + resetLoader(); $(modalPopupContent).html(content.html()); }; var errorCallBack = function (response) { - console.log(response); + // console.log(response); title.html("An Error Occurred!"); statusIcon.attr("class", defaultStatusClasses + " fw-error"); var reason = (response.responseText == "null")?response.statusText:response.responseText; @@ -93,7 +102,8 @@ function submitForm(formId) { //do nothing } description.html(reason); - console.log("Error!"); + // console.log("Error!"); + resetLoader(); $(modalPopupContent).html(content.html()); }; //executing http request @@ -111,12 +121,12 @@ function submitForm(formId) { 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()); } } $(document).on('submit', 'form', function (e) { - cosole.log("darn!!"); e.preventDefault(); var postOperationRequest = $.ajax({ url: $(this).attr("action") + '&' + $(this).serialize(), diff --git a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs index ee082f7b4..cc5660001 100644 --- a/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs +++ b/components/mobile-plugins/android-plugin/org.wso2.carbon.device.mgt.mobile.android.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.policy-wizard/public/templates/android-policy-operations.hbs @@ -65,48 +65,56 @@ - + {{#unless iscloud}} + - Work-Profile Configurations - - - - - + Work-Profile Configurations + + + + + - Application Restrictions - - - - - + Application Restrictions + + + + + - System Update Policy (COSU) - - - - - + System Update Policy (COSU) + + + + + - Whitelist Apps (COSU) - - - - + Whitelist Apps (COSU) + + + + + {{/unless}}
@@ -302,400 +310,411 @@
-
- -
-
- +
+
-
- +
+
+ {{/unless}} @@ -1375,9 +1394,7 @@
- This configuration can be used to set a passcode policy to an Android Device. - Once this configuration profile is installed on a device, corresponding users will not be able - to modify these settings on their devices. + this configurations can be used to set when system update take place in the COSU devices.
-->
{{#if isVirtual}} -

Download our Android-try-it emulator, enroll it with WSO2 Device Cloud and try it out!

+

Download our virtual Android device, enroll it with WSO2 + Device Cloud and try it out!

+ Download the virtual Android device +
{{else}}

Scan to get the Android Agent.

@@ -31,7 +33,7 @@ {{#if isCloud}}
+ target="_blank"> Get it on Google Play @@ -39,7 +41,7 @@ {{else}} {{/if}} @@ -50,20 +52,20 @@ to save it to your computer.

--> - {{#if isCloud}} - - {{else}} - - {{/if}} + {{#if isCloud}} + + {{else}} + + {{/if}}
@@ -80,47 +82,47 @@ {{#if isCloud}}
{{#if isVirtual}} -
-
Step 1
-
-
    -
  1. Unzip the 'android-tryit.zip file and run the 'start' script on your terminal.
  2. -
  3. Download and install the Android SDK. -
      -
    • If you already have an Android SDK on your computer, please provide the location of - the SDK. -
    • -
    • Else, this tool will download and install the minimum SDK components required to run - the emulator. - This is a one-time process. -
    • -
    -
  4. -
  5. Next, you will be asked to create an AVD: -
      -
    • If you don't have one, the WSO2_AVD will be created for you.
    • -
    • Else, you can use an existing AVD to try out IoT Android agent.
    • -
    -
  6. -
+
+
Step 1
+
+
    +
  1. Unzip the 'android-tryit.zip file and run the 'start' script on your terminal.
  2. +
  3. Download and install the Android SDK: +
      +
    • If you already have an Android SDK on your computer, please provide the location of + the SDK. +
    • +
    • Else, this tool will download and install the minimum SDK components required to run + the emulator. + This is a one-time process. +
    • +
    +
  4. +
  5. Next, you will be asked to create an AVD: +
      +
    • If you don't have one, the WSO2_AVD will be created for you.
    • +
    • Else, you can use an existing AVD to try out IoT Android agent.
    • +
    +
  6. +
+
+
- -
{{else}} -
-
Step 1
-
-

Let's start by opening the Android agent on your device. -
Tap on WSO2 Device Management Agent. -

+
+
Step 1
+
+

Let's start by opening the Android agent on your device. +
Tap on WSO2 Device Management Agent. +

+
+
- -
{{/if}} -
+
Step 2
-

Enter your: +

Enter your :

  • Organization: {{@user.domain}}
  • @@ -130,7 +132,7 @@
-
+
Step 3

To successfully register the virtual device,

@@ -149,9 +151,13 @@
  • Unzip the 'android-tryit.zip file and run the 'start' script on your terminal.
  • Download and install the Android SDK.
      -
    • If you already have an Android SDK on your computer, please provide the location of the SDK.
    • -
    • Else, this tool will download and install the minimum SDK components required to run the emulator. - This is a one-time process.
    • +
    • If you already have an Android SDK on your computer, please provide the location of the + SDK. +
    • +
    • Else, this tool will download and install the minimum SDK components required to run the + emulator. + This is a one-time process. +
  • Next, you will be asked to create an AVD: @@ -194,63 +200,6 @@
  • - - - - {{#zone "topCss"}} {{css "css/styles.css"}} {{/zone}} diff --git a/pom.xml b/pom.xml index 2f7d6204c..fe33bec0e 100644 --- a/pom.xml +++ b/pom.xml @@ -1128,7 +1128,7 @@ 1.1.1 - 2.0.22 + 2.0.42 [2.0.0, 3.0.0)