...
 
Commits (2)
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Kotlin Language</h2>
The <i>Kotlin</i> language is introduced with these followings points :
<ul>
<li>Officially in Android</li>
<li>Why Kotlin?</li>
<li>History of Kotlin</li>
<li>Kotlin Concept</li>
</ul>
<h3>Officially in Android</h3>
<p>Google announced <i>Kotlin</i> as an official language in <i>Android</i> development,
on 19 may 2017 (G I/O 17-19 may 2017).</p>
<h3>Why Kotlin?</h3>
<p>Maybe because of <i>Oracle</i>.</p>
<h3>History of Kotlin</h3>
<p>To resume th history of <i>Kotlin</i>:
<table>
<tr>
<th>Date</th>
<th>Version</th>
<th>Note</th>
</tr>
<tr>
<td>2010</td>
<td>α</td>
<td>Project start</td>
</tr>
<tr>
<td>2011</td>
<td>β</td>
<td>Project unveil</td>
</tr>
<tr>
<td>February 2012</td>
<td>v 0</td>
<td>Open source</td>
</tr>
<tr>
<td>February 2016</td>
<td>v 1.0</td>
<td>First stable version</td>
</tr>
<tr>
<td>May 2017</td>
<td>v 1.0</td>
<td>Support in Android</td>
</tr>
<tr>
<td>November 2017</td>
<td>v 1.2</td>
<td>Sharing code between <i>JVM</i> and <i>Javascript</i> platform</td>
</tr>
<tr>
<td>October 2018</td>
<td>v 1.3</td>
<td> Bringing of <i>coroutines</i> for asynchronous programming</td>
</tr>
</table>
</p>
<h3>Kotlin Concept</h3>
<p>To resume, most important things in <i>Kotlin</i> are:
<ul>
<li>direct language (no <code>;</code>)</li>
<li>language clear and concise (no <code>getter/setter</code>)</li>
<li>no <code>NullPointerException</code></li>
<li>interpollation of string : <code>Log.i(TAG, "my width is $mWidth")</code></li>
<li>simple declaration (<code>val</code> or <code>var</code>)</li>
<li>implicite conversion : <code>val mWidth = 0</code></li>
</ul>
</p>
<h4>Next part</h4>
<a href="file:///android_asset/2A-kotlinclass.html">Class</a>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Langage Kotlin</h2>
Le langage <i>Kotlin</i> est introduit selon les points :
<ul>
<li>Officialisation dans Android</li>
<li>Pourquoi Kotlin ?</li>
<li>Historique de Kotlin</li>
<li>Concept de Kotlin</li>
</ul>
<p>Retrouvez l'intégralité de la présentation sur <i>Kotlin</i> via ce
<a href="https://www.slideshare.net/secret/lOuMXlCGZa3VB8">lien privé</a>.</p>
<h3>Officialisation dans Android</h3>
<p>Google a officialisé le support du langage <i>Kotlin</i> pour le développement
d’application mobile <i>Android</i>, le 19 mai 2017, lors de la fameuse conférence
<i>G I/O</i> (17-19 mai 2017).</p>
<p>Plus précisément, <i>Kotlin</i> est un langage de programmation orienté objet
(POO) et fonctionnel. Il porte le nom d’une île proche de Saint Pétersbourg, la
ville où est basée l’équipe de <i>JetBrains</i> impliquée dans le développement de ce
langage. Cette société a également développer l’<i>IDE</i> (<i>Integrated Development
Environment</i>) <i>IntelliJ</i>, sur lequel est basé <i>Android Studio</i>.
<i>JetBrains</i> est réputé pour réaliser des produits de qualité.</p>
<p>Par ailleurs, la syntaxe du langage <i>Kotlin</i> ressemble à celle du langage <i>Swift</i>.
Pour rappel, le langage <i>Swift</i> a été introduit dans les développements
<i>iOS</i> à la <i>WWDC</i> 2014 (<i>Worl Wide Developers Conference</i>).
Il a rapidement eu un succès au détriment de l’<i>Objective-C</i>, l'histoire se
répète avec <i>Kotlin</i> et <i>Java</i>.</p>
<h3>Pourquoi Kotlin ?</h3>
<p>Jusqu’à présent, <i>Android</i> utilisait la technologie <i>Java</i>, initialement
développée par <i>Sun Microsystems</i>, en 1995. L’avantage de cette technologie
est de faire fonctionner un code, écrit en <i>Java</i>, de manière identique
sur n’importe quel système d’exploitation (<i>Linux</i>, <i>Windows</i> ou
<i>macOS</i>), ceci grâce à la machine virtuelle <i>Java</i> : la <i>JVM</i>.</p>
<p>Les applications mobiles <i>Android</i> évoluaient dans le meilleur des mondes
jusqu’au jour où <i>Oracle</i> racheta <i>Java</i> en 2009. Ce dernier mena
une guerre sans merci au géant de la Montain View, plaidant : les API <i>Java</i>
sont soumises à la protection de la propriété intellectuelle ! <i>Google</i>
a dû épurer <i>Android</i> des implémentations commercialisées par <i>Oracle</i>.
Cela a commencé avec <i>Lollipop</i> 🍭 en remplacant la machine virtuelle
<i>Davlik</i> par <i>Android Runtime</i>. Et cela se poursuivit avec le support
du langage de programmation <i>Kotlin</i> à partir de la version 3 d'<i>Android
Studio</i>.</p>
<h3>Historique de Kotlin</h3>
<p><i>Kotlin</i> est exposé au grand jour en juillet 2011. Le projet a été lancé
un an plutôt, soit en 2010. Il est ouvert en développement libre en février 2012.
Une première version stable apparaît en février 2016. Depuis, il s'ensuit quelques
versions contenant d'importantes évolutions. <br/>
Voici un tableau résumant l'historique de <i>Kotlin</i> :
<table>
<tr>
<th>Date</th>
<th>Version</th>
<th>Note</th>
</tr>
<tr>
<td>2010</td>
<td>α</td>
<td>Lancement du projet</td>
</tr>
<tr>
<td>2011</td>
<td>β</td>
<td>Annonce du projet</td>
</tr>
<tr>
<td>Février 2012</td>
<td>v 0</td>
<td>Open source</td>
</tr>
<tr>
<td>Février 2016</td>
<td>v 1.0</td>
<td>Première version stable</td>
</tr>
<tr>
<td>Mai 2017</td>
<td>v 1.0</td>
<td>Support dans Android</td>
</tr>
<tr>
<td>Novembre 2017</td>
<td>v 1.2</td>
<td>Partage de code entre <i>JVM</i> et la plateforme <i>Javascript</i></td>
</tr>
<tr>
<td>Octobre 2018</td>
<td>v 1.3</td>
<td> Apport des <i>coroutines</i> pour la programmation asynchrone</td>
</tr>
</table>
</p>
<p>Par ailleurs, les développeurs <i>Android</i> n'ont pas attendu l'officialisation
du support de ce langage pour l'adopter.</p>
<h3>Concept de Kotlin</h3>
<p>Le langage <i>Kotlin</i> a tout pour plaire. Tout d'abord, il est
possible de le faire cohabiter avec du code <i>Java</i>.<br>
En effet, une classe <i>Kotlin</i> est compilé en <i>bytecode Java</i>, de cette façon des
objets <i>Kotlin</i> peuvent être utilisé dans du code <i>Java</i> et vice versa.<br/>
Cela permet de passer un projet <i>Android</i>, de <i>Java</i> à <i>Kotlin</i>,
de manière progressive.</p>
<p>Ensuite, <i>Android Studio</i> propose une conversion automatique du code
<i>Java</i> en code <i>Kotlin</i>, via le menu ‘Code’ > ‘Convert Java File to Kotlin File’
(Command + Option + Shift + K).</p>
<p>En bref, voici les principales vertues de <i>Kotlin</i> :
<ul>
<li>langage peu verbeux (absence de <code>;</code>)</li>
<li>langage clair et concis (pas besoin d'écrire de <code>getter/setter</code>, l'accès aux attributs est direct)</li>
<li>affranchissement du <code>NullPointerException</code></li>
<li>interpollation de chaines de charactère : <code>Log.i(TAG, "my width is $mWidth")</code></li>
<li>déclaration de variables simplifiée (soit <code>val</code> soit <code>var</code>)</li>
<li>conversion de type implicite : <code>val mWidth = 0</code></li>
</ul>
<p>Enfin, <i>Kotlin</i> est un langage clair et concis où rien n'est nulle.
Ce dernier point marque une grande différence avec le langage <i>Java</i> (cf.
<code>NullPointerException</code>). Il en résulte une philosophie de programmation
différente où l'initialisation des objets demandent une attention particulière.</p>
<p>Finalement, l'apprentissage du langage <i>Kotlin</i> comprend deux phases. Premièrement,
il s'agit de se familiariser avec la syntaxe de ce langage de POO (et de désapprendre les
autres syntaxes maîtrisées telles que celles du langage <i>Java</i> ou C/C++).<br/>
Deuxièmement, il s'agit d'appréhender les principaux concepts du fonctionnel.</p>
<h4>Partie suivante</h4>
<a href="file:///android_asset/2A-classekotlin.html">Classe</a>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Classe</h2>
La Classe <i>Kotlin</i> est abordée selon les points suivants :
<ul>
<li>Déclaration</li>
<li>Propriété</li>
<li>Objet compagnon</li>
<li>Fonction</li>
<li>Qualificatifs</li>
<li>Héritage</li>
</ul>
<h4>Partie suivante</h4>
<a href="file:///android_asset/2B-operateur.html">Variables, Opérateurs, Conditions</a>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Classe</h2>
<i>Kotlin</i> class is unveiled according to the following points:
<ul>
<li>Declaration</li>
<li>Properties</li>
<li>Companion Object</li>
<li>Function</li>
<li>Modifiers</li>
<li>Heritage</li>
</ul>
<h4>Next part</h4>
<a href="file:///android_asset/2B-operator.html">Variables, Operators, Conditions</a>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Variables, Opérateurs, Conditions</h2>
Dans cette partie, il est abordé les points suivants :
<ul>
<li>Déclaration de variable</li>
<li>Nullité sécurisée</li>
<li>Différents types</li>
<li>Opérateurs</li>
<li>Conditions</li>
<li>Boucle</li>
</ul>
<h4>Partie suivante</h4>
<a href="file:///android_asset/2C-fonctionnelle.html">Programmation fonctionnelle</a>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Variables, Operators, Conditions</h2>
The following points are introduced:
<ul>
<li>Declaration variable</li>
<li>Nullability</li>
<li>Types</li>
<li>Operators</li>
<li>Conditions</li>
<li>Loop</li>
</ul>
<h4>Next part</h4>
<a href="file:///android_asset/2C-functional.html">Functional programming</a>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Programmation fonctionnelle</h2>
Dans cette partie, il est abordé les points suivants :
<ul>
<li>Fonction d’extension</li>
<li>Lambdas</li>
<li>Inline</li>
<li>Initialisation tardive</li>
<li>Initialisation avec une classe déléguée</li>
</ul>
<h4>La suite</h4>
Kotlin pour l'Interface Utilisateur<br/>
Développements classiques d'Android
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="file:///android_asset/style.css" />
</head>
<body>
<h2>Functional programming</h2>
The following points are introduced:
<ul>
<li>Extension Function</li>
<li>Lambdas</li>
<li>Inline</li>
<li>Late init</li>
<li>Init with delegate</li>
</ul>
<h4>Next</h4>
Kotlin for the User Interface
[
{
"question": "Wich one is immuable?",
"opt": [
"val toto = \"toto\"",
"var pipo = \"pipo\"",
"pipo = \"pipo\"",
"toto = \"toto\""
],
"ans": 0
},
{
"question": "Wich one is mutable?",
"opt": [
"val toto = \"toto\"",
"var pipo = \"pipo\"",
"pipo = \"pipo\"",
"toto = \"toto\""
],
"ans": 1
},
{
"question": "Wich one is true?",
"opt": [
"int i = 20",
"val i : int = 20",
"i = 20",
"val i : Int = 20"
],
"ans": 1
},
{
"question": "Is it possible to use Switch/case in Kotlin ?",
"opt": [
"Yes",
"No",
"No, we have to use When()",
"Maybe"
],
"ans": 2
},
{
"question": "What is the extension of a Kotlin file?",
"opt": [
"File.kotlin",
"File.kot",
"File.ktl",
"File.kt"
],
"ans": 3
},
{
"question": "Kotlin is it interoperable with Java?",
"opt": [
"Yes",
"No",
"Maybe",
"I don't know"
],
"ans": 0
},
{
"question": "How many constructor we have in Kotlin?",
"opt": [
"One",
"Two",
"Three",
"look at me"
],
"ans": 1
},
{
"question": "Why use lateinit?",
"opt": [
"To initialize a data",
"To initialize a variable",
"To initialize a unicorn",
"To initialize a variable later"
],
"ans": 3
},
{
"question": "In Kotlin, a function which return nothing return:",
"opt": [
"void",
"Unit",
"null",
"Int"
],
"ans": 1
},
{
"question": "In Kotlin, a function is defined with:",
"opt": [
"def",
"fun",
"function",
"Unit"
],
"ans": 1
},
{
"question": "In Kotlin, by default, abstract classes are:",
"opt": [
"Public",
"default",
"close",
"open"
],
"ans": 3
},
{
"question": "In Kotlin, in aim of being used as a mother class, the class have to be:",
"opt": [
"Public",
"default",
"open",
"close"
],
"ans": 2
}
]
[
{
"question": "Quel attribut est immuable ?",
"opt": [
"val toto = \"toto\"",
"var pipo = \"pipo\"",
"pipo = \"pipo\"",
"toto = \"toto\""
],
"ans": 0
},
{
"question": "Quel attribut est mutable ?",
"opt": [
"val toto = \"tot\"",
"var pipo = \"pipo\"",
"pipo = \"pipo\"",
"toto = \"toto\""
],
"ans": 1
},
{
"question": "Quelles déclarations est vrai ?",
"opt": [
"int i = 20",
"val i : int = 20",
"i = 20",
"val i : Int = 20"
],
"ans": 3
},
{
"question": "Est-ce qu'il est possible d'utiliser un Switch/case en Kotlin ?",
"opt": [
"Oui",
"Non",
"Non, c'est remplacé par l'expression When()",
"Parfois"
],
"ans": 2
},
{
"question": "Quelle est l'extension d'un fichier Kotlin ?",
"opt": [
"File.kotlin",
"File.kot",
"File.ktl",
"File.kt"
],
"ans": 3
},
{
"question": "Est-ce que Kotlin est interopérable avec Java ?",
"opt": [
"Oui",
"Non",
"Peut-être",
"Je ne sais pas"
],
"ans": 0
},
{
"question": "Combien de type de constructeur, existe-t-il en Kotlin ?",
"opt": [
"Un",
"Deux",
"Trois",
"Soleil"
],
"ans": 1
},
{
"question": "Pour quelle raison est utilisée le mot clé lateinit ?",
"opt": [
"C'est utilisé pour un type de donnée",
"C'est utilisé pour assigner une variable",
"C'est utilisé comme une structure d'égalité",
"C'est utilisé pour dire au compilateur que la variable sera initialisée plus tard"
],
"ans": 3
},
{
"question": "Dans Kotlin, une fonction qui ne retourne aucun type retourne :",
"opt": [
"void",
"Unit",
"null",
"Int"
],
"ans": 1
},
{
"question": "Dans Kotlin, une fonction est définie par le mot clé :",
"opt": [
"def",
"fun",
"function",
"Unit"
],
"ans": 1
},
{
"question": "Dans Kotlin, par défaut, les classes abstraites sont :",
"opt": [
"Public",
"default",
"close",
"open"
],
"ans": 3
},
{
"question": "En Kotlin, pour qu'une classe puisse être hérité, elle doit être déclarée ?",
"opt": [
"Public",
"default",
"open",
"close"
],
"ans": 2
}
]
......@@ -42,6 +42,7 @@ class App : Application() {
ResourcesCompat.getColor(instance.resources, R.color.colorKotlin, null)
)
}
val sAndroidImg = intArrayOf(R.drawable.ic_android, R.drawable.ic_android_kotlin, R.drawable.ic_android_natif, R.drawable.ic_android_interactif, R.drawable.ic_android_tool, R.drawable.ic_android_adapter, R.drawable.ic_android_user, R.drawable.ic_android_db)
}
override fun onCreate() {
......
......@@ -24,6 +24,7 @@ class ScrollingActivity : AppCompatActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
val index = intent.getIntExtra(App.BUNDLE_PART, 0)
title = resources.getStringArray(R.array.title_session)[index]
scrollingDetailsImg.setImageResource(App.sAndroidImg[index])
fab.setOnClickListener { view ->
startActivity<PurchaseActivity>()
}
......
......@@ -30,6 +30,8 @@ class ABCFragment : Fragment() {
abcSession1.setOnClickListener { startActivity<ScrollingActivity>(App.BUNDLE_PART to 0) }
abcSession2.text = sessionTitleArray[1]
abcSession2.setOnClickListener { startActivity<ScrollingActivity>(App.BUNDLE_PART to 1) }
abcSession3.text = sessionTitleArray[2]
abcSession4.text = sessionTitleArray[3]
abcSession5.text = sessionTitleArray[4]
......
......@@ -24,6 +24,8 @@ class ExpandableListFragment : Fragment() {
lateinit var urlArray: Array<String>
var index = 0
private var tocSectionArray = HashMap<String, List<String>>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
......@@ -36,7 +38,7 @@ class ExpandableListFragment : Fragment() {
var listAdapter = ExpandableListAdapter(tocArray.toList(), tocSectionArray)
detailExpandList.setAdapter(listAdapter)
detailExpandList.setOnChildClickListener { parent, view, position, positionBis, id ->
startActivity<FragmentContainerActivity>(FragmentContainerActivity.FRAGMENT_ID to App.FRAGMENT_WEB_VIEW, App.BUNDLE_URL to urlArray[position])
startActivity<FragmentContainerActivity>(FragmentContainerActivity.FRAGMENT_ID to App.FRAGMENT_WEB_VIEW, App.BUNDLE_URL to urlArray[position], App.BUNDLE_PART to index)
true
}
}
......@@ -46,7 +48,9 @@ class ExpandableListFragment : Fragment() {
urlArray = activity.intent.getStringArrayExtra(App.BUNDLE_URL_ARRAY)
val tocSectionId = resources.obtainTypedArray(R.array.toc_section).getResourceId(0, 0)
index = activity.intent.getIntExtra(App.BUNDLE_PART, 0)
val tocSectionId = resources.obtainTypedArray(R.array.toc_section).getResourceId(index, 0)
val tocSectionIdArray: TypedArray = resources.obtainTypedArray(tocSectionId)
for (i in 0 until tocSectionIdArray.length()) {
......
......@@ -23,7 +23,7 @@
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:toolbarId="@+id/toolbar">
<ImageView
android:id="@+id/awardDetailsImg"
android:id="@+id/scrollingDetailsImg"
android:layout_width="@dimen/size_120"
android:layout_height="@dimen/size_120"
android:layout_gravity="center"
......
......@@ -207,8 +207,51 @@ Tel un soupir, je sens l’air encore frais de la nuit qui s’échappe. Le ciel
</string-array>
<string-array name="url_prez">
<item>https://www.slideshare.net/secret/vZmtgyHq40gC36</item>
<item>https://www.slideshare.net/secret/lOuMXlCGZa3VB8</item>
</string-array>
<string-array name="path_quiz">
<item>quizz1.json</item>
<item>quizz2.json</item>
</string-array>
<string-array name="url_session2">
<item>file:///android_asset/2-langagekotlin.html</item>
<item>file:///android_asset/2A-classekotlin.html</item>
<item>file:///android_asset/2B-operateur.html</item>
<item>file:///android_asset/2C-fonctionnelle.html</item>
</string-array>
<string-array name="title_section_session2">
<item>Langage Kotlin</item>
<item>Classe</item>
<item>Variables, Operateurs, Conditions</item>
<item>Programmation fonctionnelle</item>
</string-array>
<string-array name="title_section1_session2">
<item>Officialisation dans Android</item>
<item>Pourquoi Kotlin ?</item>
<item>Historique de Kotlin</item>
<item>Concept de Kotlin</item>
</string-array>
<string-array name="title_section2_session2">
<item>Déclaration</item>
<item>Propriété</item>
<item>Objet compagnon</item>
<item>Fonction</item>
<item>Qualificatifs</item>
<item>Héritage</item>
</string-array>
<string-array name="title_section3_session2">
<item>Déclaration de variable</item>
<item>Nullité sécurisée</item>
<item>Différents types</item>
<item>Opérateurs</item>
<item>Conditions</item>
<item>Loop</item>
</string-array>
<string-array name="title_section4_session2">
<item>Fonction d’extension</item>
<item>Lambdas</item>
<item>Inline</item>
<item>Initialisation tardive</item>
<item>Initialisation avec une classe déléguée</item>
</string-array>
</resources>
\ No newline at end of file
......@@ -187,6 +187,9 @@
<string-array name="text_session">
<item>
"Only available in french for the moment.\n\n"
</item>
<item>
"Only available in french for the moment. Try the quiz!\n\n"
</item>
</string-array>
<string name="label_overview">Overview</string>
......@@ -207,9 +210,11 @@
</string-array>
<string-array name="toc_session" translatable="false">
<item>@array/title_section_session1</item>
<item>@array/title_section_session2</item>
</string-array>
<string-array name="toc_section" translatable="false">
<item>@array/toc_session1</item>
<item>@array/toc_session2</item>
</string-array>
<string-array name="toc_session1" translatable="false">
<item>@array/title_section1_session1</item>
......@@ -249,6 +254,7 @@
</string-array>
<string-array name="url_session" translatable="false">
<item>@array/url_session1</item>
<item>@array/url_session2</item>
</string-array>
<string-array name="url_session1">
<item>file:///android_asset/1A-androidplatform.html</item>
......@@ -259,8 +265,58 @@
</string-array>
<string-array name="url_prez">
<item>https://www.slideshare.net/secret/vZmtgyHq40gC36</item>
<item>https://www.slideshare.net/secret/lOuMXlCGZa3VB8</item>
</string-array>
<string-array name="path_quiz">
<item>quiz1.json</item>
<item>quiz2.json</item>
</string-array>
<string-array name="toc_session2" translatable="false">
<item>@array/title_section1_session2</item>
<item>@array/title_section2_session2</item>
<item>@array/title_section3_session2</item>
<item>@array/title_section4_session2</item>
</string-array>
<string-array name="url_session2">
<item>file:///android_asset/2-kotlinlanguage.html</item>
<item>file:///android_asset/2A-kotlinclass.html</item>
<item>file:///android_asset/2B-operator.html</item>
<item>file:///android_asset/2C-functional.html</item>
</string-array>
<string-array name="title_section_session2">
<item>Kotlin Language</item>
<item>Class</item>
<item>Variables, Operators, Conditions</item>
<item>Functional Programming</item>
</string-array>
<string-array name="title_section1_session2">
<item>Officially in Android</item>
<item>Why Kotlin?</item>
<item>History of Kotlin</item>
<item>Kotlin Concept</item>
</string-array>
<string-array name="title_section2_session2">
<item>Declaration</item>
<item>Properties</item>
<item>Companion Object</item>
<item>Function</item>
<item>Modifiers</item>
<item>Heritage</item>
</string-array>
<string-array name="title_section3_session2">
<item>Declaration variable</item>
<item>Nullability</item>
<item>Types</item>
<item>Operators</item>
<item>Conditions</item>
<item>Loop</item>
</string-array>
<string-array name="title_section4_session2">
<item>Extension Function</item>
<item>Lambdas</item>
<item>Inline</item>
<item>Late init</item>
<item>Init with delegate</item>
</string-array>
</resources>