Add CsharpGrpc Samples for Aurum Document 10/286510/16
authorChihun Jeong <chihun.jeong@samsung.com>
Mon, 9 Jan 2023 06:17:43 +0000 (15:17 +0900)
committerChihun Jeong <chihun.jeong@samsung.com>
Wed, 11 Jan 2023 06:04:40 +0000 (15:04 +0900)
Change-Id: I8446e4672c80a13ffd13e899ac2b8346569ffbf7

36 files changed:
docs/docs/commands/application/closeapp.md
docs/docs/commands/application/getactiveapptoolkitname.md
docs/docs/commands/application/getappinfo.md
docs/docs/commands/application/installapp.md
docs/docs/commands/application/launchapp.md
docs/docs/commands/application/removeapp.md
docs/docs/commands/device/click.md
docs/docs/commands/device/flick.md
docs/docs/commands/device/getdevicetime.md
docs/docs/commands/device/getscreensize.md
docs/docs/commands/device/longclick.md
docs/docs/commands/device/sendkey.md
docs/docs/commands/device/takescreenshot.md
docs/docs/commands/device/touchdown.md
docs/docs/commands/device/touchmove.md
docs/docs/commands/device/touchup.md
docs/docs/commands/uiobject/actionandwaitevent.md
docs/docs/commands/uiobject/clear.md
docs/docs/commands/uiobject/dumpobjecttree.md
docs/docs/commands/uiobject/findElement.md
docs/docs/commands/uiobject/findElements.md
docs/docs/commands/uiobject/getattribute.md
docs/docs/commands/uiobject/getsize.md
docs/docs/commands/uiobject/gettextminboundingrect.md
docs/docs/commands/uiobject/getvalue.md
docs/docs/commands/uiobject/setfous.md
docs/docs/commands/uiobject/settimeout.md
docs/docs/commands/uiobject/setvalue.md
docs/docs/gettingstarted/C#.md [new file with mode: 0644]
docs/docs/gettingstarted/java.md
docs/docs/gettingstarted/node.md
docs/docs/gettingstarted/python.md
docs/index.md
examples/C#/GrpcSample.csproj [new file with mode: 0644]
examples/C#/helloworld.cs [new file with mode: 0644]
examples/C#/tizen-manifest.xml [new file with mode: 0644]

index 959ab83..fa3607d 100644 (file)
@@ -18,6 +18,9 @@ Close application
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.closeApp({ packageName : 'EFL-Border-Sample' }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.closeApp(new ReqCloseApp{PackageName = packageName});
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 46b3d81..a2c602a 100644 (file)
@@ -12,12 +12,15 @@ Get the toolkit name of active application
     <li class="nav-item remove active">
     <a class="nav-link active" data-toggle="tab" id="python-tab" data-target="#python-tab-pane">Python</a>
     </li>
-    <li class="nav-item remove">
+   <li class="nav-item remove">
     <a class="nav-link" data-toggle="tab" id="js-tab" data-target="#js-tab-pane">Node</a>
     </li>
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.getActiveAppToolkitName({}, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.getActiveAppToolkitName(new ReqGetActiveAppToolkitName{});
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index d63ce62..1f2dfe5 100644 (file)
@@ -18,6 +18,9 @@ Get application info
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,17 @@ stub.getAppInfo({ packageName : 'packageName' }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+String packageName = "packageName";
+var response = client.getAppInfo(new ReqGetAppInfo{PackageName = packageName});
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 71f1eb1..4d47aed 100644 (file)
@@ -18,22 +18,25 @@ Install application
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
 {% capture code %}
 {% highlight python linenos %}
-def get_file_chunks(filename):                                             
-   CHUNK_SIZE = 1024 * 1024                                                
-   with open(filename, 'rb') as f:                                         
-       while True:                                                         
-           piece = f.read(CHUNK_SIZE)                                      
-           if len(piece) == 0:                                             
-               return                                                      
-        yield ReqInstallApp(package = piece)                              
-                                                                           
-tpkPath = './app.tpk'              
-tpkFile = get_file_chunks(tpkPath)                                 
+def get_file_chunks(filename):
+   CHUNK_SIZE = 1024 * 1024
+   with open(filename, 'rb') as f:
+       while True:
+           piece = f.read(CHUNK_SIZE)
+           if len(piece) == 0:
+               return
+        yield ReqInstallApp(package = piece)
+
+tpkPath = './app.tpk'
+tpkFile = get_file_chunks(tpkPath)
 response = stub.installApp(tpkFile)
 {% endhighlight %}
 {% endcapture %}
@@ -60,7 +63,15 @@ tpk.on('data', (chunk) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 0552588..055c6ff 100644 (file)
@@ -18,6 +18,9 @@ Launch application
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -48,7 +51,17 @@ stub.launchApp({ packageName : 'packageName' }, (err, response) => {
 {% endhighlight %}
 {% endcapture %}
 {% include fix_linenos.html code=code %}
-{% assign code = nil %} 
+{% assign code = nil %}
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+String packageName = "packageName";
+var response = client.launchApp(new ReqLaunchApp{PackageName = packageName});
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 1fd78c1..de6c371 100644 (file)
@@ -18,6 +18,9 @@ Remove application
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,17 @@ stub.removeApp({ packageName : 'org.tizen.example.NUITizenGallery' }, (err, resp
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+String packageName = "packageName";
+var response = client.removeApp(new ReqRemoveApp{PackageName = packageName});
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index bd64984..6dd1037 100644 (file)
@@ -18,6 +18,9 @@ Generate click event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.click({ type: 'COORD', coordination: { x: 100, y: 100 } }, (err, response)
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.click(new ReqClick{ Type = ReqClick.Types.RequestType.Coord, Coordination = new Point{ X = 100, Y = 100 } });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index cd9e716..1a0d038 100644 (file)
@@ -12,12 +12,15 @@ Generate flick event
     <li class="nav-item remove active">
     <a class="nav-link active" data-toggle="tab" id="python-tab" data-target="#python-tab-pane">Python</a>
     </li>
-    <li class="nav-item remove">
+   <li class="nav-item remove">
     <a class="nav-link" data-toggle="tab" id="js-tab" data-target="#js-tab-pane">Node</a>
     </li>
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.flick({ startPoint: { x: 100, y: 500 }, endPoint: { x: 100, y: 100 } }, (er
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.flick(new ReqFlick{ StartPoint = new Point{ X = 10, Y = 500 }, EndPoint = new Point{ X = 10, Y = 200 }, DurationMs = 150 });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index fb850cd..20794b4 100644 (file)
@@ -18,6 +18,9 @@ Generate click event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -44,6 +47,15 @@ stub.getDeviceTime({ type: 'SYSTEM' }, (err, response) => {
     <div class="tab-pane fade" id="java-tab-pane">
 
     </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.getDeviceTime(new ReqGetDeviceTime{ Type = ReqGetDeviceTime.Types.TimeType.Wallclock });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
+    </div>
 </div>
 
 
index 603a5cd..b43753f 100644 (file)
@@ -18,6 +18,9 @@ Get screen size
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.getScreenSize({}, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.getScreenSize(new ReqGetScreenSize{});
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 5384811..11b52b0 100644 (file)
@@ -12,12 +12,15 @@ Generate longclick (500ms) event
     <li class="nav-item remove active">
     <a class="nav-link active" data-toggle="tab" id="python-tab" data-target="#python-tab-pane">Python</a>
     </li>
-    <li class="nav-item remove">
+   <li class="nav-item remove">
     <a class="nav-link" data-toggle="tab" id="js-tab" data-target="#js-tab-pane">Node</a>
     </li>
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.longClick({ type: 'COORD', coordination: { x: 100, y: 100 } }, (err, respon
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.longClick(new ReqClick{ Type = ReqClick.Types.RequestType.Coord, Coordination = new Point{ X = 100, Y = 100 } });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 9e98060..b50821b 100644 (file)
@@ -18,6 +18,9 @@ Generate key event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.sendKey({ type: 'XF86', actionType: 'STROKE', XF86keyCode: 'Return'}, (err,
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.sendKey(new ReqKey{ Type = ReqKey.Types.KeyType.Xf86, ActionType = ReqKey.Types.KeyActionType.Stroke, XF86KeyCode = "Left" });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 90fcdb9..f36d0cd 100644 (file)
@@ -18,15 +18,18 @@ Take screenshot
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
 {% capture code %}
 {% highlight python linenos %}
-response = stub.takeScreenshot(ReqTakeScreenshot())      
-image = open("screenshot.png", "wb")                     
-for r in response:                                       
-    image.write(r.image)                                 
+response = stub.takeScreenshot(ReqTakeScreenshot())
+image = open("screenshot.png", "wb")
+for r in response:
+    image.write(r.image)
 image.close()
 {% endhighlight %}
 {% endcapture %}
@@ -49,7 +52,22 @@ result.on('data', (response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+String path = "screenshot.png";
+FileStream fs = File.Create(path);
+while(await responses.ResponseStream.MoveNext())
+{
+    var response = responses.ResponseStream.Current;
+    fs.Write(response.Image.ToByteArray());
+}
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 02f0c23..5206655 100644 (file)
@@ -18,6 +18,9 @@ Generate touch down event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.touchDown({ coordination: { x: 100, y: 100 } }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.touchDown(new ReqTouchDown{ Coordination = new Point{ X = 100, Y = 100 } });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index b45335d..764d20d 100644 (file)
@@ -18,6 +18,9 @@ Generate touch move event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.touchDown({ coordination: { x: 100, y: 100 } }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.touchDown(new ReqTouchDown{ Coordination = new Point{ X = 100, Y = 100 } });
+var response2 = client.touchMove(new ReqTouchMove{ SeqId = response.SeqId, Coordination = new Point{ X = 100, Y = 500 } });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index fd546c1..c9c00c9 100644 (file)
@@ -18,6 +18,9 @@ Generate touch up event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.touchDown({ coordination: { x: 100, y: 100 } }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.touchDown(new ReqTouchDown{ Coordination = new Point{ X = 100, Y = 100 } });
+var response2 = client.touchUp(new ReqTouchUp{ SeqId = response.SeqId, Coordination = new Point{ X = 100, Y = 100 } });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 649103f..a84f74c 100644 (file)
@@ -18,6 +18,9 @@ Do action and wait event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -47,7 +50,17 @@ stub.actionAndWaitEvent({ type: 'KEY', XF86keyCode: 'Down',
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.actionAndWaitEvent(new ReqActionAndWaitEvent{ Type = ReqActionAndWaitEvent.Types.ActionType.Key, XF86KeyCode = "Down",
+                    EventType = ReqActionAndWaitEvent.Types.EventType.EventStateChangedFocused, TimeoutMs = 500 });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 82e7eb3..a72c10d 100644 (file)
@@ -18,6 +18,9 @@ Clear value of the object
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.findElement({ widgetType: 'TextField' }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ WidgetType = "TextField" });
+var response = client.clear(new ReqClear{ ElementId = element.Element.ElementId });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index eb57caa..68a179c 100644 (file)
@@ -18,13 +18,16 @@ Generate click event
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
 {% capture code %}
 {% highlight python linenos %}
-  element = stub.findElement(ReqFindElement(maxDepth = 1, isShowing = True))   
-  response = stub.dumpObjectTree(ReqDumpObjectTree(elementId = element.element.elementId))           
+  element = stub.findElement(ReqFindElement(maxDepth = 1, isShowing = True))
+  response = stub.dumpObjectTree(ReqDumpObjectTree(elementId = element.element.elementId))
 {% endhighlight %}
 {% endcapture %}
 {% include fix_linenos.html code=code %}
@@ -50,7 +53,17 @@ stub.findElement({ maxDepth: 1, isShowing: true }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement { MaxDepth = 1, IsShowing = true });
+var response = client.dumpObjectTree(new ReqDumpObjectTree{ ElementId = element.Element.ElementId });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 789f8dd..e73808c 100644 (file)
@@ -18,6 +18,9 @@ If an object that satisfies a specific condition is searched on the screen and f
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.findElement({ widgetType: "TextField" }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.findElement(new ReqFindElement{ IsClickable = true, });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 3f7ff8b..3a6e2ac 100644 (file)
@@ -18,6 +18,9 @@ If objects that satisfies a specific condition are searched on the screen and fo
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -32,7 +35,7 @@ response = stub.findElements(ReqFindElements(isClickable=True))
     <div class="tab-pane fade" id="js-tab-pane">
 {% capture code %}
 {% highlight js linenos %}
-stub.findElements({ isClickable: true }, (err, response) => { 
+stub.findElements({ isClickable: true }, (err, response) => {
     if (err) console.log(err);
     else console.log(response);
 })
@@ -42,7 +45,16 @@ stub.findElements({ isClickable: true }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.findElements(new ReqFindElements{ IsClickable = true, });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 8998efb..f76f60b 100644 (file)
@@ -17,6 +17,9 @@ Get attribute of the object## Example Usage
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -49,7 +52,17 @@ stub.findElement({ maxDepth: 1, isShowing: true }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ MaxDepth = 1, IsShowing = true });
+var response = client.getAttribute(new ReqGetAttribute{ ElementId = element.Element.ElementId, Attribute = ReqGetAttribute.Types.RequestType.Showing });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 23602fb..fd7769d 100644 (file)
@@ -18,6 +18,9 @@ Get geometry of the object
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.findElement({ maxDepth: 1, isShowing: true }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ MaxDepth = 1, IsShowing = true });
+var response = client.getSize(new ReqGetSize{ Type = ReqGetSize.Types.CoordType.Screen, ElementId = element.Element.ElementId });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 2603f86..8c7e0a7 100644 (file)
@@ -18,6 +18,9 @@ Get the minium bounding rect size of text
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.findElement({ widgetType: 'TextLabel' }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ WidgetType = "TextLabel" });
+var response = client.getTextMinBoundingRect(new ReqGetTextMinBoundingRect{ ElementId = element.Element.ElementId });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index d1f675b..c8dbb90 100644 (file)
@@ -18,6 +18,9 @@ Get the value of the object
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.findElement({ widgetType: 'TextField' }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ WidgetType = "TextField" });
+var response = client.getValue(new ReqGetValue{ ElementId = element.Element.ElementId, Type = ParamType.String });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 564c909..2cde979 100644 (file)
@@ -18,6 +18,9 @@ Set focus to specific UI Object
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.findElement({ isFocusable:true, isShowing: true }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ IsFocusable = true, IsShowing = true });
+var response = client.setFocus(new ReqSetFocus{ ElementId = element.Element.ElementId });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 92d346e..2802b99 100644 (file)
@@ -12,12 +12,15 @@ Set Timeout
     <li class="nav-item remove active">
     <a class="nav-link active" data-toggle="tab" id="python-tab" data-target="#python-tab-pane">Python</a>
     </li>
-    <li class="nav-item remove">
+   <li class="nav-item remove">
     <a class="nav-link" data-toggle="tab" id="js-tab" data-target="#js-tab-pane">Node</a>
     </li>
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -42,7 +45,16 @@ stub.setTimeout({ timeout: 5000 }, (err, response) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var response = client.setTimeout(new ReqSetTimeout{ Timeout = 5000 });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
index 240e7a4..2434b31 100644 (file)
@@ -12,12 +12,15 @@ Set the value of the object
     <li class="nav-item remove active">
     <a class="nav-link active" data-toggle="tab" id="python-tab" data-target="#python-tab-pane">Python</a>
     </li>
-    <li class="nav-item remove">
+   <li class="nav-item remove">
     <a class="nav-link" data-toggle="tab" id="js-tab" data-target="#js-tab-pane">Node</a>
     </li>
     <li class="nav-item remove" style="display:none">
     <a class="nav-link" data-toggle="tab" id="java-tab" data-target="#java-tab-pane">Java</a>
     </li>
+    <li class="nav-item remove">
+    <a class="nav-link" data-toggle="tab" id="grpc-tab" data-target="#grpc-tab-pane">C#</a>
+    </li>
 </ul>
 <div class="tab-content">
     <div class="tab-pane fade active" id="python-tab-pane">
@@ -50,7 +53,17 @@ stub.findElement({ widgetType: 'TextField' }, (err, element) => {
 {% assign code = nil %}
     </div>
     <div class="tab-pane fade" id="java-tab-pane">
-    
+
+    </div>
+    <div class="tab-pane fade" id="grpc-tab-pane">
+{% capture code %}
+{% highlight csharp linenos %}
+var element = client.findElement(new ReqFindElement{ WidgetType = "TextField" });
+var response = client.setValue(new ReqSetValue{ ElementId = element.Element.ElementId, StringValue = "Test" });
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
     </div>
 </div>
 
diff --git a/docs/docs/gettingstarted/C#.md b/docs/docs/gettingstarted/C#.md
new file mode 100644 (file)
index 0000000..08051d3
--- /dev/null
@@ -0,0 +1,74 @@
+---
+layout: default
+title: C#
+parent: Getting Started
+nav_order: 34
+---
+
+# Quick Start
+{: .fs-8 }
+
+This guide gets you started with Aurum in C# with a simple working example.
+This guide allows you to use Aurum on Tizen devices.
+{: .fs-5 .fw-300 }
+
+## Prerequisites
+
+## Download the example
+```bash
+# Clone the repository to get the example code:
+$ git clone -b tizen git://git.tizen.org/platform/core/uifw/aurum
+# Navigate to the C# example:
+$ cd aurum/examples/C#
+# Install the example's dependencies
+```
+
+## Download the aurum.proto
+From the examples/C# directory:
+```bash
+$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto
+```
+
+## Connect to target
+```bash
+$ sdb shell app_launcher -s org.tizen.aurum-bootstrap
+$ sdb forward tcp:50051 tcp:50051
+```
+
+## Run a Aurum example
+From the examples/C# directory:
+```bash
+$ dotnet run
+```
+Congratulations! You’ve just run a UI automation test application with Aurum.
+
+## Introduce an example code
+{% capture code %}
+{% highlight csharp linenos %}
+using System;
+using Grpc.Core;
+using Aurum;
+
+namespace GrpcSample
+{
+    static class Program
+    {
+        [STAThread]
+        static void Main(string[] args)
+        {
+            Environment.SetEnvironmentVariable("GRPC_CSHARP_EXT_OVERRIDE_LOCATION", "/usr/lib/libgrpc_csharp_ext.so", EnvironmentVariableTarget.Process);
+            Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
+            var client = new Bootstrap.BootstrapClient(channel);
+            var response = client.getDeviceTime(new ReqGetDeviceTime{ Type = ReqGetDeviceTime.Types.TimeType.Wallclock });
+            Console.WriteLine(response.LocaleDatetime);
+        }
+    }
+}
+{% endhighlight %}
+{% endcapture %}
+{% include fix_linenos.html code=code %}
+{% assign code = nil %}
+
+## What’s next
+- Explore the [API reference](/tizen/aurum/docs/commands/).
+- The Aurum [issue tracker](https://github.sec.samsung.net/tizen/aurum/issues) - let the Aurum maintainers know here if you think you've found a bug
\ No newline at end of file
index 7553fbe..b45da7f 100644 (file)
@@ -21,13 +21,13 @@ $ git clone -b tizen git://git.tizen.org/platform/core/uifw/aurum
 # Navigate to the Java example:
 $ cd aurum/examples/java
 # Install the example's dependencies
-$ npm install   
+$ npm install
 ```
 
 ## Download the aurum.proto
 From the examples/node directory:
 ```bash
-$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto   
+$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto
 ```
 
 ## What’s next
index b4ca87e..33b1c07 100644 (file)
@@ -21,13 +21,13 @@ $ git clone -b tizen git://git.tizen.org/platform/core/uifw/aurum
 # Navigate to the Node example:
 $ cd aurum/examples/node
 # Install the example's dependencies
-$ npm install   
+$ npm install
 ```
 
 ## Download the aurum.proto
 From the examples/node directory:
 ```bash
-$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto  
+$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto
 ```
 
 ## Connect to target
index 993af78..0f32c23 100644 (file)
@@ -41,7 +41,7 @@ $ cd aurum/examples/python
 ## Generate gRPC code from aurum.proto
 From the examples/python directory:
 ```bash
-$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto  
+$ curl -L -O https://github.sec.samsung.net/pages/tizen/aurum/protocol/aurum.proto
 $ python3 -m grpc_tools.protoc --python_out=. --grpc_python_out=. --proto_path=. aurum.proto
 ```
 
index efb087e..29f17fb 100644 (file)
@@ -9,7 +9,7 @@ permalink: /
 # Aurum
 {: .fs-9 }
 
-Aurum is a UI automation framework without UI Toolkit dependency. 
+Aurum is a UI automation framework without UI Toolkit dependency.
 {: .fs-6 .fw-300 }
 
 [Learn more](/tizen/aurum/docs/introduction){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }
@@ -17,8 +17,8 @@ Aurum is a UI automation framework without UI Toolkit dependency.
 Get started now!
 {: .fs-6 .fw-300 }
 
-[Python](/tizen/aurum/docs/gettingstarted/python){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [Node](/tizen/aurum/docs/gettingstarted/node){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }
---- 
+[Python](/tizen/aurum/docs/gettingstarted/python){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [Node](/tizen/aurum/docs/gettingstarted/node){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [C#](/tizen/aurum/docs/gettingstarted/C#){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 }
+---
 
 ### License
 
diff --git a/examples/C#/GrpcSample.csproj b/examples/C#/GrpcSample.csproj
new file mode 100644 (file)
index 0000000..dea3bb3
--- /dev/null
@@ -0,0 +1,34 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Protobuf Include="aurum.proto" GrpcServices="Client" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NET" Version="9.0.0.16445" >
+      <ExcludeAssets>Runtime</ExcludeAssets>
+    </PackageReference>
+    <PackageReference Include="Tizen.NET.Sdk" Version="1.1.6" />
+    <PackageReference Include="Tizen.NUI.XamlBuild" Version="1.0.27" />
+    <PackageReference Include="Grpc.Core" Version="2.43.0" />
+    <PackageReference Include="Google.Protobuf" Version="3.19.4" />
+    <PackageReference Include="Grpc.Tools" Version="2.43.0" PrivateAssets="All" />
+  </ItemGroup>
+
+  <PropertyGroup>
+    <NeedInjection>True</NeedInjection>
+  </PropertyGroup>
+
+</Project>
diff --git a/examples/C#/helloworld.cs b/examples/C#/helloworld.cs
new file mode 100644 (file)
index 0000000..69dfe01
--- /dev/null
@@ -0,0 +1,19 @@
+using System;
+using Grpc.Core;
+using Aurum;
+
+namespace GrpcSample
+{
+    static class Program
+    {
+        [STAThread]
+        static void Main(string[] args)
+        {
+            Environment.SetEnvironmentVariable("GRPC_CSHARP_EXT_OVERRIDE_LOCATION", "/usr/lib/libgrpc_csharp_ext.so", EnvironmentVariableTarget.Process);
+            Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
+            var client = new Bootstrap.BootstrapClient(channel);
+            var response = client.getDeviceTime(new ReqGetDeviceTime{ Type = ReqGetDeviceTime.Types.TimeType.Wallclock });
+            Console.WriteLine(response.LocaleDatetime);
+        }
+    }
+}
diff --git a/examples/C#/tizen-manifest.xml b/examples/C#/tizen-manifest.xml
new file mode 100644 (file)
index 0000000..5ee289d
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="4" package="org.tizen.example.GrpcSample" version="1.0.0">
+  <profile name="common" />
+  <ui-application appid="org.tizen.example.GrpcSample" exec="GrpcSample.dll" type="dotnet" multiple="false" taskmanage="true" nodisplay="false">
+    <icon>GrpcSample.png</icon>
+    <label>GrpcSample</label>
+    <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
+  </ui-application>
+  <privileges>
+    <privilege>http://tizen.org/privilege/window.priority.set</privilege>
+  </privileges>
+</manifest>