From e139eb8a402e1a892d7abe0b98dac12aef6ae58e Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Sat, 12 Dec 2015 23:20:42 +0530 Subject: [PATCH 1/3] changing logo title --- .../devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/device-mgt-iot-feature/org.wso2.carbon.device.mgt.iot.feature/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs b/features/device-mgt-iot-feature/org.wso2.carbon.device.mgt.iot.feature/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs index 5d18e1cfb8..6444d9e643 100644 --- a/features/device-mgt-iot-feature/org.wso2.carbon.device.mgt.iot.feature/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs +++ b/features/device-mgt-iot-feature/org.wso2.carbon.device.mgt.iot.feature/src/main/resources/jaggeryapps/devicemgt/app/units/iot.unit.ui.header.logo/logo.hbs @@ -1 +1 @@ -{{#zone "productName"}}IoT SERVER{{/zone}} \ No newline at end of file +{{#zone "productName"}}IoT Server{{/zone}} \ No newline at end of file From 6e645667b11a97440b4dc65697ad5f80d273a124 Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Sun, 13 Dec 2015 00:04:01 +0530 Subject: [PATCH 2/3] fixing ui styling issues --- .../type-view.hbs | 113 ++++++++---------- 1 file changed, 50 insertions(+), 63 deletions(-) diff --git a/features/device-mgt-iot-virtualfirealarm-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs b/features/device-mgt-iot-virtualfirealarm-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs index 83b8fd6fd9..d5327320b4 100644 --- a/features/device-mgt-iot-virtualfirealarm-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs +++ b/features/device-mgt-iot-virtualfirealarm-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.virtual_firealarm.type-view/type-view.hbs @@ -1,37 +1,27 @@

Virtual Firealrm


-

Connect your Android device - to the WSO2 device cloud.

+

Connect your Android device to the WSO2 device cloud.

-

Ingredients

-
-

Hardware Requirements

-
- - - - - Raspberry Pi (Internet Enabled)
- - - - DHT11 Temperature Sensor
- - - - LED
- - - - Buzzer(3v)
- - -
+

Ingredients

+
+

Hardware Requirements

+
+
    +
  • + Raspberry Pi (Internet Enabled)
  • +
  • + DHT11 Temperature Sensor
  • +
  • + LED
  • +
  • + Buzzer(3v)
  • +
+
Download @@ -39,7 +29,7 @@
@@ -155,40 +145,38 @@

-
-

Prepare


-

Get your device ready

-
- -

01 Set up your RaspberryPi device as shown in the schematic below and get the FireAlarm setup.

-

02 Connect a monitor to your RaspberryPi via the HDMI cable to get a UI view of the device.

-

03 Get the RaspberryPi to connect to the internet (via Ethernet or Wifi) and note its IP_ADDRESS

- -
-
- -
-

Schematic Diagram


-

Click on the image to zoom

-
- - - -
-
-
+
+

Prepare


+

Get your device ready

+
    +
  • 01 Set up your RaspberryPi device as shown in the schematic below and get the FireAlarm setup.
  • +
  • 02 Connect a monitor to your RaspberryPi via the HDMI cable to get a UI view of the device.
  • +
  • 03 Get the RaspberryPi to connect to the internet (via Ethernet or Wifi) and note its IP_ADDRESS
  • +
+
+
-
-

Connect (Quick Start)


-

Internet of Things Foundation Quickstart connection

-
+
+

Schematic Diagram


+

Click on the image to zoom

+
+ + + +
+
+
-

01 Click on the 'Create DEB' button above to get the download link for the FireAlarm setup files

-

02 (The following commands can be issued by directly typing into the terminal of the device or by an 'ssh' login from a remote PC)

-

03 Download the FireAlarm setup files using the following command: 'curl -k < url_link_received_from_the_above_step >> Agent.zip'
This will download a zip file named 'Agent.zip'

- -
-
+
+

Connect (Quick Start)


+

Internet of Things Foundation Quickstart connection

+
    +
  • 01 Click on the 'Create DEB' button above to get the download link for the FireAlarm setup files
  • +
  • 02 (The following commands can be issued by directly typing into the terminal of the device or by an 'ssh' login from a remote PC)
  • +
  • 03 Download the FireAlarm setup files using the following command: 'curl -k < url_link_received_from_the_above_step >> Agent.zip'
    This will download a zip file named 'Agent.zip'
  • +
+
+
@@ -272,5 +260,4 @@ } -{{/zone}} - +{{/zone}} \ No newline at end of file From ee3b5c95bdf67049ea01116b661c1ef93b7a12e5 Mon Sep 17 00:00:00 2001 From: Rasika Perera Date: Sun, 13 Dec 2015 01:47:21 +0530 Subject: [PATCH 3/3] refactoring and adding qr code gen --- .../resources/carbonapps/Accelerometer.car | Bin 4184 -> 4184 bytes .../src/main/resources/carbonapps/Battery.car | Bin 3997 -> 3997 bytes .../src/main/resources/carbonapps/GPS.car | Bin 3905 -> 3905 bytes .../src/main/resources/carbonapps/Gravity.car | Bin 4014 -> 4014 bytes .../main/resources/carbonapps/Gyroscope.car | Bin 4074 -> 4074 bytes .../src/main/resources/carbonapps/Light.car | Bin 3942 -> 3942 bytes .../main/resources/carbonapps/Magnetic.car | Bin 4027 -> 4027 bytes .../main/resources/carbonapps/Pressure.car | Bin 4034 -> 4034 bytes .../main/resources/carbonapps/Proximity.car | Bin 4081 -> 4081 bytes .../main/resources/carbonapps/Rotation.car | Bin 4027 -> 4027 bytes .../device-view.js | 2 +- .../type-view.hbs | 112 +++------- .../carbonapps/Temperature_Sensor.car | Bin 4138 -> 4138 bytes .../device-view.js | 2 +- .../device-view.js | 2 +- .../type-view.hbs | 204 +++++++----------- .../type-view.js | 6 + .../device-view.js | 2 +- .../type-view.hbs | 161 ++++++-------- .../type-view.js | 6 + 20 files changed, 195 insertions(+), 302 deletions(-) create mode 100644 features/device-mgt-mdm-android-feature/org.wso2.carbon.device.mgt.mobile.android.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android.type-view/type-view.js create mode 100644 features/device-mgt-mdm-windows-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.js diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Accelerometer.car b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Accelerometer.car index 6facba556a9660f8c8b59eab5f044bd1daf89d18..aaef515ce224cef498581e26a4bd7a9ac1a894d0 100644 GIT binary patch delta 222 zcmcbia6^GNz?+$ci-CcIf#GRm&qQ8ZW)S6T1*W>J!PE&o5Vi4VC?klT9LRJJOdByj z0nwW!SvEi<&al1&3+!NX1`BNd$Nn86^MmsuSmq2D6GY%5w=dWXMIJ9OoyX%1ruXpJ uf$6_IIbb@6Hxf*r;0*)QihKoNdJ11Sn107s0j4wgW5M)Eeu#Nu0!{$gR$sIL delta 222 zcmcbia6^GNz?+$ci-CcIfx%-{_e5S>W_KXvYsC!Wby=yEjX+Y=B6dVSNdb*t~ocTkQuz?+$ci-CcIf#GRm&qQ8hW)S6U0H(?e!PF`}5Vi5P4I_x2EX8ydOuu5f z0-`q`WS$F=NMyYQ7O-Qp1`BMiVgCq`Dd0Q})?&x?8%*19JA>&aZU-=Zl-m(ZbMn}M tX)m4#Fujz=A54Ge@d49ryfF}QUSBZ%l{W=U$M6M%=}mlIVER9w698U*UA6!K delta 221 zcmX>ocTkQuz?+$ci-CcIfx%-{_e5S}W)S6U0H(?e!PF`}=CG{Rjkj$WLG)xPrn6xB z71I?Ez4;*XT!=&>>n*T=9h)^+U~>)oM~F-T=V`DOJFed#6DQknJA>&aZU-=Zl-m(Z xbMn}M)p_wmfa#??{$Tn$j}Mr3Q>I)*P8OmE`z0@MHboB;JoP2>Oo diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Gravity.car b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Gravity.car index 8ae1ad3ece8a10f6095005ec301708298ffac2e5..a14213b2fdf3d301c5a75baf9d376e486e3ad584 100644 GIT binary patch delta 222 zcmZ1{zfPVvz?+$ci-CcIf#GRm&qQ7eW)S6J0;cLs!PIs=5Vi4zCnJcSY{GOEO!F|` z2GN^eF)x5f^s+tx3ly-Kfdw|NWd8t>nZtP&ER(~<3=t^e_5ho)m)iwQv+%frX&)Xt uFx|_O2&O;sgn(%e-T*K?n>PhaGw}t2=`g+=FnyFS98Amedx7a3ekTA`j$6V2 delta 222 zcmZ1{zfPVvz?+$ci-CcIfx%-{_e5R`W)S6J0;cLs!PIs==07XCH@@&>1ksaCn683p z9_HI1dh;vh1rUi|)(2pL0yZ|UGz delta 222 zcmaDQ|4N=Wz?+$ci-CcIfx%-{_e5SxW)S6R2BwVYr4WhvtWUrKZEW^nfz2n_KSN~pah?Oq^mDN?f{dIzo!b*kKjwA=(>grv zV7iRQ4s7;zo)j=G#~TW!%Xovp^l9Dx AJ^%m! diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Light.car b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Light.car index e4169554541075c93335194f915af09d0553b15d..17fb3c71289746ddafae842f54ebdea8ce0ae847 100644 GIT binary patch delta 222 zcmaDR_e_pAz?+$ci-CcIf#GRm&qQ8RW)S6S1g5Ht!PEvl5Vi546C;S8tj2T!O#fuM z0iriwVV(_LyNuOFC>=S=|9hj{(LvyzY_qWr(5p; delta 222 zcmaDR_e_pAz?+$ci-CcIfx%-{_e5S(W)S6S1g5Ht!PEvl=CG{RjSrm|LG)xbrVC*D zC({iOz4;3BY=}e=>s_!w5Ssy5U~?<`3y4es=NYh!Jr^q@$jHg=+^%4{pW6vcU*UEJ z(^5QkV6&rnV!-q+o!tVqCF_}yq diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Magnetic.car b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Magnetic.car index 92474032874ac4c03cb99bad77b2cc1e3561d393..49477a43d1b2e76e08fae5d61f5cbb975b3a415f 100644 GIT binary patch delta 221 zcmdljzgwO+z?+$ci-CcIf#GRm&qQ7eW)S6J3Z@#&z|>AX5Vi4@7bA$CY|eBQO!G6} z2GN_}GB1KiOk#Zm7AR-41`BN7%Ki!>vxxI7NM>;n7ldER?EyC80Jkfc=HPJy(}6s8 uV0scy5}5wZ69T6Fcmu)oBHlDG&CM4CrW5$`!1P7F2r#X~?**nS`JDh^uUu;Y delta 221 zcmdljzgwO+z?+$ci-CcIfx%-{_e5R`W)S6J3Z@#&z|>AX=CG{Rjjy~ILG)yErmJ9@ zpZPY3-u#w%5kz7V>m#s0Ih!?DVDnb?R}h&+oM%BYi;K7zK_*Tv<@Ny62e@6qGzX6x zm=5Hz0~ke@LD;z?+$ci-CcIf#GRm&qQ7eW)S6J3Z@#&z|>AX5Vi4@CnJcSY{qmIO!G0{ z1<{+|F)xBhOlExq7N}se0t;;3%Ki}|vy$^HNM>;*7ldEK?EyC8IJYa9=I3z((-Ay& uV0tD`5}5wS69T3~c>}@pO5QXuEyNcDrqlWI!1N8i2rzBT?**nC_?-ZWtX%2< delta 221 zcmX>ke@LD;z?+$ci-CcIfx&ZC_e5R`W)S6J3Z@#&z|>AX=07XCH@@;@1ksbtn683p zKIXe1dhL^ufz4alKSE?ya-IdrEUx5Y1erLwhT8*7ALn)j)BHSc zU^;@w4s7&Ho+L2+k0%67hw=u3>6N@`U|NVT2u!E*<$>uNd=X&UnBNObH}E?F00`|} AlmGw# diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Proximity.car b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Proximity.car index 11fb9b542b37ae70fff48da0ecb065b4d4e76ddf..f286c14050fb69f92ebb7e437201e73133f20aec 100644 GIT binary patch delta 222 zcmew;|52Vdz?+$ci-CcIf#GRm&qQ8JW)S6R2Bwr z!E`N;9oX!BJSkvWl{XYj*YXB|=}WvBVA_^17)(#*D*)4M{E=WfiQfxMujh9H00aSE A%m4rY diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Rotation.car b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/carbonapps/Rotation.car index 91cbff6a7d6bcdba82a2eeb9222412640015f8f8..b5462dd8f5e693b1e7d7e6a9327096dc5b5e8c51 100644 GIT binary patch delta 222 zcmdljzgwO+z?+$ci-CcIf#GRm&qQ7eW)S6J3Z@#&z|>AX5Vi4@CnJcSY{qm2O!G3| z2GN^eGcSZl^s_z$3ly_if(16OXa4|^S;Tn;EK|tE2oWgd_5ho4fZG*JbMUx<=|CPk uFg=MU2~2AX=07XCH@@;@1ksbtn67|n zUgp~%dh=`Mg%F8;)`wt$Vm3>#z~=SrA0RS|IM0A(3b_~=K}Jq4<@Ny62e@6qGzX6x zm=5Hz1DidGCkae{=LrGRe!PKTdJ%6LnC9jS0@De6d0_e?Uj&%e;r9a5mHbWs4isGy diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js index 54e67c5751..e06f03d95f 100644 --- a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js +++ b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.device-view/device-view.js @@ -4,7 +4,7 @@ function onRequest(context) { var deviceId = request.getParameter("id"); if (deviceType != null && deviceType != undefined && deviceId != null && deviceId != undefined) { - var deviceModule = require("/modules/device.js").deviceModule; + var deviceModule = require("/app/modules/device.js").deviceModule; var device = deviceModule.viewDevice(deviceType, deviceId); if (device) { diff --git a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs index 9952f3e8d5..c1b918464c 100644 --- a/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs +++ b/features/device-mgt-iot-androidsense-feature/org.wso2.carbon.device.mgt.iot.androidsense.feature/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.type-view/type-view.hbs @@ -5,29 +5,23 @@ to the WSO2 device cloud.

- +

Ingredients


Hardware Requirements


- - - - Raspberry Pi (Internet Enabled)
- - - - DHT11 Temperature Sensor
- - - - LED
- - - - Buzzer(3v)
+
    +
  • + Raspberry Pi (Internet Enabled)
  • +
  • + DHT11 Temperature Sensor
  • +
  • + LED
  • +
  • + Buzzer(3v)
  • +

Download @@ -39,34 +33,23 @@

Name your device and download the agent from following link.


-
+
-
- - - -
- -
+

+ +
-
- -
- Download +
+ Download Now    - +     Copy Link        @@ -184,47 +167,36 @@

Get your device ready


+
    +
  • 01 Set up your RaspberryPi device + as shown in the schematic below and get the FireAlarm setup.
  • -

    01 Set up your RaspberryPi device - as shown in the schematic below and get the FireAlarm setup.

    - -

    02 Connect a monitor to your - RaspberryPi via the HDMI cable to get a UI view of the device.

    - -

    03 Get the RaspberryPi to connect - to the internet (via Ethernet or Wifi) and note its IP_ADDRESS

    +
  • 02 Connect a monitor to your + RaspberryPi via the HDMI cable to get a UI view of the device.
  • +
  • 03 Get the RaspberryPi to connect + to the internet (via Ethernet or Wifi) and note its IP_ADDRESS
  • +

-
-

Schematic Diagram

-
-

Click on the image to zoom

-
- - - -
-
-
-

Connect (Quick Start)


Internet of Things Foundation Quickstart connection


-

01 Click on the 'Create - DEB' button above to get the download link for the FireAlarm setup files

+
    +
  • 01 Click on the 'Create + DEB' button above to get the download link for the FireAlarm setup files
  • -

    02 (The following commands can +

  • 02 (The following commands can be issued by directly typing into the terminal of the device or by an 'ssh' login - from a remote PC)

    + from a remote PC)
  • -

    03 Download the FireAlarm setup +

  • 03 Download the FireAlarm setup files using the following command: 'curl -k < url_link_received_from_the_above_step >> - Agent.zip'
    This will download a zip file named 'Agent.zip'

    + Agent.zip'

    This will download a zip file named 'Agent.zip'
  • +

@@ -300,19 +272,5 @@ {{#zone "bottomJs"}} {{js "/js/download.js"}} {{js "/js/jquery.validate.js"}} - {{/zone}} diff --git a/features/device-mgt-iot-virtualfirealarm-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/carbonapps/Temperature_Sensor.car b/features/device-mgt-iot-virtualfirealarm-feature/org.wso2.carbon.device.mgt.iot.virtualfirealarm.feature/src/main/resources/carbonapps/Temperature_Sensor.car index a3c31e1912476820c3543f8302503cdbfa30a832..3302515d438d19954fd88821c198e0503fc04ae7 100644 GIT binary patch delta 222 zcmZ3buu6e9z?+$ci-CcIf#GRm&qQ8pW)S6V0jAn4!PFr=5Vi4hAR~yL?9Ox>Osg_K z0@0hfSXMzKwzED53oK-F0t;+@#{LB&bC>fxSY|yJH$-4Bw>Q`fZXORX9meAcrWf(p vf$7IQ8DQFvHyli_;0*!O|9Nx3bRJ(Qm_Ei=0;X;GqrvoSelIZng5L=M{0&~n delta 222 zcmZ3buu6e9z?+$ci-CcIfx%!y_e5T6W)S6V0jAn4!PFr==CG{Rjh_P$c^*LBzA)6CeVDmHfFA$l#oaezZ>$$iYK}JsA%k2%Oxp_RmbQq5( zm|nzV2R8dLPX?Iw;|&MXD|kb|^nczQFrCL23Z{?om4Inm{%9~go8Jpezu

Android Mobile


-

Connect your Android device - to the WSO2 device cloud.

+

Connect your Android device to the WSO2 device cloud.

- +
-

Ingredients

-
-

Hardware Requirements

-
- - - - - Raspberry Pi (Internet Enabled)
- - - - DHT11 Temperature Sensor
- - - - LED
- - - - Buzzer(3v)
- - -
- +

Ingredients

+
+

Hardware Requirements

+
+
    +
  • + Android Mobile
  • +
+
- Download + Enroll Device

-
-

Prepare


-

Get your device ready

-
- -

01 Set up your RaspberryPi device as shown in the schematic below and get the FireAlarm setup.

-

02 Connect a monitor to your RaspberryPi via the HDMI cable to get a UI view of the device.

-

03 Get the RaspberryPi to connect to the internet (via Ethernet or Wifi) and note its IP_ADDRESS

- -
-
- -
-

Schematic Diagram


-

Click on the image to zoom

-
- - - -
-
-
- -
-

Connect (Quick Start)


-

Internet of Things Foundation Quickstart connection

-
- -

01 Click on the 'Create DEB' button above to get the download link for the FireAlarm setup files

-

02 (The following commands can be issued by directly typing into the terminal of the device or by an 'ssh' login from a remote PC)

-

03 Download the FireAlarm setup files using the following command: 'curl -k < url_link_received_from_the_above_step >> Agent.zip'
This will download a zip file named 'Agent.zip'

- -
-
+
+

Prepare


+

Get your device ready

+
    +
  • 01 Download Device Agent into your Android Mobile.
  • +
  • 02 Install the Agent APK file.
  • +
  • 03 Configure the Agent App
  • +
+
+
-