diff --git a/android/tutorial/build.gradle b/android/tutorial/build.gradle
new file mode 100644
index 000000000..1bd1e38ab
--- /dev/null
+++ b/android/tutorial/build.gradle
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-kapt'
+
+android {
+ compileSdkVersion 28
+
+
+ defaultConfig {
+ applicationId "com.facebook.flipper.sample.tutorial"
+ minSdkVersion 23
+ targetSdkVersion 28
+ versionCode 1
+ versionName "1.0"
+ }
+
+ compileOptions {
+ targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+}
+
+dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$KOTLIN_VERSION"
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'androidx.core:core-ktx:1.0.1'
+
+ // Flipper
+ // For simplicity, we use Flipper for both debug and release builds here.
+ // Check out the "sample" app to see how to separate your build flavors.
+ implementation project(':android')
+ implementation deps.soloader
+
+ // Litho
+ implementation deps.lithoCore
+ implementation deps.lithoWidget
+ implementation deps.lithoAnnotations
+ implementation deps.lithoSectionsAnnotations
+ implementation deps.lithoFresco
+ implementation deps.lithoSectionsCore
+ implementation deps.lithoSectionsDebug
+ implementation deps.lithoSectionsWidget
+ implementation deps.fresco
+ kapt deps.lithoProcessor
+ kapt deps.lithoSectionsProcessor
+}
diff --git a/android/tutorial/proguard-rules.pro b/android/tutorial/proguard-rules.pro
new file mode 100644
index 000000000..f1b424510
--- /dev/null
+++ b/android/tutorial/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/android/tutorial/src/main/AndroidManifest.xml b/android/tutorial/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..715beeef2
--- /dev/null
+++ b/android/tutorial/src/main/AndroidManifest.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/MainActivity.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/MainActivity.kt
new file mode 100644
index 000000000..f09570ecd
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/MainActivity.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import com.facebook.flipper.sample.tutorial.ui.RootComponent
+import com.facebook.litho.LithoView
+import com.facebook.litho.sections.SectionContext
+
+class MainActivity : AppCompatActivity() {
+
+ private val sectionContext: SectionContext by lazy { SectionContext(this) }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContentView(
+ LithoView.create(this, RootComponent.create(sectionContext).build())
+ )
+ }
+}
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/TutorialApplication.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/TutorialApplication.kt
new file mode 100644
index 000000000..f11aed57b
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/TutorialApplication.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial
+
+import android.app.Application
+import com.facebook.drawee.backends.pipeline.Fresco
+import com.facebook.flipper.android.AndroidFlipperClient
+import com.facebook.flipper.core.FlipperClient
+import com.facebook.flipper.plugins.inspector.DescriptorMapping
+import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin
+import com.facebook.flipper.plugins.litho.LithoFlipperDescriptors
+import com.facebook.soloader.SoLoader
+
+class TutorialApplication : Application() {
+ override fun onCreate() {
+ super.onCreate()
+
+ SoLoader.init(this, false)
+ Fresco.initialize(this)
+ val flipperClient = AndroidFlipperClient.getInstance(this)
+ val descriptorMapping = DescriptorMapping.withDefaults()
+ LithoFlipperDescriptors.addWithSections(descriptorMapping)
+
+ flipperClient.addPlugin(InspectorFlipperPlugin(this, descriptorMapping))
+ flipperClient.start()
+ }
+}
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/FeedItemCardSpec.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/FeedItemCardSpec.kt
new file mode 100644
index 000000000..bb11f87ab
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/FeedItemCardSpec.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import com.facebook.litho.Column
+import com.facebook.litho.Component
+import com.facebook.litho.ComponentContext
+import com.facebook.litho.annotations.LayoutSpec
+import com.facebook.litho.annotations.OnCreateLayout
+import com.facebook.litho.annotations.Prop
+import com.facebook.litho.widget.Card
+
+import com.facebook.yoga.YogaEdge.HORIZONTAL
+import com.facebook.yoga.YogaEdge.VERTICAL
+
+@LayoutSpec
+object FeedItemCardSpec {
+
+ @OnCreateLayout
+ fun onCreateLayout(
+ c: ComponentContext,
+ @Prop mammal: MarineMammal): Component =
+ Column.create(c)
+ .paddingDip(VERTICAL, 8f)
+ .paddingDip(HORIZONTAL, 16f)
+ .child(
+ Card.create(c)
+ .content(
+ MarineMammelComponent.create(c)
+ .mammal(mammal)))
+ .build()
+}
\ No newline at end of file
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/FeedSectionSpec.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/FeedSectionSpec.kt
new file mode 100644
index 000000000..a63e93a43
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/FeedSectionSpec.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import com.facebook.litho.annotations.FromEvent
+import com.facebook.litho.annotations.OnEvent
+import com.facebook.litho.annotations.Prop
+import com.facebook.litho.sections.Children
+import com.facebook.litho.sections.SectionContext
+import com.facebook.litho.sections.annotations.GroupSectionSpec
+import com.facebook.litho.sections.annotations.OnCreateChildren
+import com.facebook.litho.sections.common.DataDiffSection
+import com.facebook.litho.sections.common.RenderEvent
+import com.facebook.litho.widget.ComponentRenderInfo
+import com.facebook.litho.widget.RenderInfo
+
+@GroupSectionSpec
+object FeedSectionSpec {
+ @OnCreateChildren
+ fun onCreateChildren(c: SectionContext, @Prop data: List): Children =
+ Children.create()
+ .child(DataDiffSection.create(c)
+ .data(data)
+ .renderEventHandler(FeedSection.render(c)))
+ .build()
+
+ @OnEvent(RenderEvent::class)
+ fun render(
+ c: SectionContext,
+ @FromEvent model: MarineMammal): RenderInfo =
+ ComponentRenderInfo.create()
+ .component(FeedItemCard.create(c).mammal(model).build())
+ .build()
+}
\ No newline at end of file
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammal.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammal.kt
new file mode 100644
index 000000000..3d98df4bf
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammal.kt
@@ -0,0 +1,12 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import android.net.Uri
+
+data class MarineMammal(val title: String, val picture_url: Uri)
\ No newline at end of file
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammals.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammals.kt
new file mode 100644
index 000000000..5d98dfbb2
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammals.kt
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import androidx.core.net.toUri
+
+object MarineMammals {
+ val list = listOf(
+ MarineMammal("Polar Bear", "https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Ursus_maritimus_4_1996-08-04.jpg/190px-Ursus_maritimus_4_1996-08-04.jpg".toUri()),
+ MarineMammal("Sea Otter", "https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Sea_otter_cropped.jpg/220px-Sea_otter_cropped.jpg".toUri()),
+ MarineMammal("West Indian Manatee", "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/FL_fig04.jpg/230px-FL_fig04.jpg".toUri()),
+ MarineMammal("Bottlenose Dolphin", "https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Tursiops_truncatus_01.jpg/220px-Tursiops_truncatus_01.jpg".toUri())
+ )
+}
\ No newline at end of file
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammelComponentSpec.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammelComponentSpec.kt
new file mode 100644
index 000000000..f5ed5c14d
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/MarineMammelComponentSpec.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import android.graphics.Typeface
+import com.facebook.litho.Column
+import com.facebook.litho.Component
+import com.facebook.litho.ComponentContext
+import com.facebook.litho.annotations.LayoutSpec
+import com.facebook.litho.annotations.OnCreateLayout
+import com.facebook.litho.annotations.Prop
+import com.facebook.litho.widget.Text
+import com.facebook.yoga.YogaEdge.BOTTOM
+import com.facebook.yoga.YogaEdge.LEFT
+import com.facebook.yoga.YogaEdge.HORIZONTAL
+import com.facebook.yoga.YogaPositionType.ABSOLUTE
+
+@LayoutSpec
+object MarineMammelComponentSpec {
+ @OnCreateLayout
+ fun onCreateLayout(
+ c: ComponentContext,
+ @Prop mammal: MarineMammal
+ ): Component =
+ Column.create(c)
+ .child(SingleImageComponent.create(c)
+ .image(mammal.picture_url)
+ .build()
+ )
+ .child(
+ Text.create(c)
+ .text(mammal.title)
+ .textStyle(Typeface.BOLD)
+ .textSizeDip(24f)
+ .backgroundColor(0xDDFFFFFF.toInt())
+ .positionType(ABSOLUTE)
+ .positionDip(BOTTOM, 4f)
+ .positionDip(LEFT, 4f)
+ .paddingDip(HORIZONTAL, 6f))
+ .build()
+
+}
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/RootComponentSpec.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/RootComponentSpec.kt
new file mode 100644
index 000000000..196347b2c
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/RootComponentSpec.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import com.facebook.litho.Component
+import com.facebook.litho.ComponentContext
+import com.facebook.litho.annotations.LayoutSpec
+import com.facebook.litho.annotations.OnCreateLayout
+import com.facebook.litho.sections.SectionContext
+import com.facebook.litho.sections.widget.RecyclerCollectionComponent
+import com.facebook.yoga.YogaEdge
+
+@LayoutSpec
+object RootComponentSpec {
+ @OnCreateLayout
+ fun onCreateLayout(c: ComponentContext): Component =
+ RecyclerCollectionComponent.create(c)
+ .disablePTR(true)
+ .section(FeedSection.create(SectionContext(c)).data(MarineMammals.list).build())
+ .paddingDip(YogaEdge.TOP, 8f)
+ .build()
+}
\ No newline at end of file
diff --git a/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/SingleImageComponentSpec.kt b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/SingleImageComponentSpec.kt
new file mode 100644
index 000000000..69a2b28ac
--- /dev/null
+++ b/android/tutorial/src/main/java/com/facebook/flipper/sample/tutorial/ui/SingleImageComponentSpec.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial.ui
+
+import android.net.Uri
+import com.facebook.drawee.backends.pipeline.Fresco
+import com.facebook.litho.Component
+import com.facebook.litho.ComponentContext
+import com.facebook.litho.annotations.LayoutSpec
+import com.facebook.litho.annotations.OnCreateLayout
+import com.facebook.litho.annotations.Prop
+import com.facebook.litho.annotations.PropDefault
+import com.facebook.litho.fresco.FrescoImage
+
+@LayoutSpec
+object SingleImageComponentSpec {
+
+ @PropDefault
+ val imageAspectRatio = 1f
+
+ @OnCreateLayout
+ fun onCreateLayout(
+ c: ComponentContext,
+ @Prop image: Uri,
+ @Prop(optional = true) imageAspectRatio: Float): Component =
+ Fresco.newDraweeControllerBuilder()
+ .setUri(image)
+ .build().let {
+ FrescoImage.create(c)
+ .controller(it)
+ .imageAspectRatio(imageAspectRatio)
+ .build()
+ }
+}
\ No newline at end of file
diff --git a/android/tutorial/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/tutorial/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 000000000..098c81685
--- /dev/null
+++ b/android/tutorial/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/tutorial/src/main/res/drawable/ic_launcher_background.xml b/android/tutorial/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 000000000..fffc51dc0
--- /dev/null
+++ b/android/tutorial/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/tutorial/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/tutorial/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 000000000..0f788cef8
--- /dev/null
+++ b/android/tutorial/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/tutorial/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/tutorial/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 000000000..0f788cef8
--- /dev/null
+++ b/android/tutorial/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/tutorial/src/main/res/mipmap-hdpi/ic_launcher.png b/android/tutorial/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..898f3ed59
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/tutorial/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/tutorial/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 000000000..dffca3601
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/android/tutorial/src/main/res/mipmap-mdpi/ic_launcher.png b/android/tutorial/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..64ba76f75
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/tutorial/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/tutorial/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 000000000..dae5e0823
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/android/tutorial/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/tutorial/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e5ed46597
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/tutorial/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/tutorial/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..14ed0af35
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/android/tutorial/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/tutorial/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..b0907cac3
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/tutorial/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/tutorial/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..d8ae03154
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/android/tutorial/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/tutorial/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2c18de9e6
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/tutorial/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/tutorial/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..beed3cdd2
Binary files /dev/null and b/android/tutorial/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/android/tutorial/src/main/res/values/colors.xml b/android/tutorial/src/main/res/values/colors.xml
new file mode 100644
index 000000000..42b275a66
--- /dev/null
+++ b/android/tutorial/src/main/res/values/colors.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ #008577
+ #00574B
+ #D81B60
+
diff --git a/android/tutorial/src/main/res/values/strings.xml b/android/tutorial/src/main/res/values/strings.xml
new file mode 100644
index 000000000..ca16ffb7b
--- /dev/null
+++ b/android/tutorial/src/main/res/values/strings.xml
@@ -0,0 +1,10 @@
+
+
+
+ Flipper Tutorial
+
diff --git a/android/tutorial/src/main/res/values/styles.xml b/android/tutorial/src/main/res/values/styles.xml
new file mode 100644
index 000000000..9a5f2b7f4
--- /dev/null
+++ b/android/tutorial/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
diff --git a/android/tutorial/src/test/java/com/facebook/flipper/sample/tutorial/ExampleUnitTest.kt b/android/tutorial/src/test/java/com/facebook/flipper/sample/tutorial/ExampleUnitTest.kt
new file mode 100644
index 000000000..9a75e1043
--- /dev/null
+++ b/android/tutorial/src/test/java/com/facebook/flipper/sample/tutorial/ExampleUnitTest.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file
+ * in the root directory of this source tree.
+ */
+
+package com.facebook.flipper.sample.tutorial
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/build.gradle b/build.gradle
index 3dd36c1de..372a402f2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,13 +3,14 @@
// This source code is licensed under the MIT license found in the LICENSE file
// in the root directory of this source tree.
-buildscript {
+buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION"
}
}
@@ -67,10 +68,13 @@ ext.deps = [
// Litho
lithoAnnotations : "com.facebook.litho:litho-annotations:$LITHO_VERSION",
lithoCore : "com.facebook.litho:litho-core:$LITHO_VERSION",
+ lithoSectionsAnnotations: "com.facebook.litho:litho-sections-annotations:$LITHO_VERSION",
lithoSectionsDebug : "com.facebook.litho:litho-sections-debug:$LITHO_VERSION",
lithoSectionsCore : "com.facebook.litho:litho-sections-core:$LITHO_VERSION",
+ lithoSectionsWidget : "com.facebook.litho:litho-sections-widget:$LITHO_VERSION",
lithoWidget : "com.facebook.litho:litho-widget:$LITHO_VERSION",
lithoProcessor : "com.facebook.litho:litho-processor:$LITHO_VERSION",
+ lithoSectionsProcessor: "com.facebook.litho:litho-sections-processor:$LITHO_VERSION",
lithoFresco : "com.facebook.litho:litho-fresco:$LITHO_VERSION",
lithoTesting : "com.facebook.litho:litho-testing:$LITHO_VERSION",
// Debugging and testing
diff --git a/gradle.properties b/gradle.properties
index 2de8cd206..a919ab54b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -14,6 +14,7 @@ POM_DEVELOPER_NAME=facebook
# Shared version numbers
LITHO_VERSION=0.25.0
ANDROIDX_VERSION=1.0.0
+KOTLIN_VERSION=1.3.21
# Gradle internals
org.gradle.internal.repository.max.retries=10
diff --git a/settings.gradle b/settings.gradle
index 210a380a5..f22f63277 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -13,6 +13,7 @@ include ':fbjni'
include ':easywsclient'
include ':sonarcpp'
include ':sample'
+include ':tutorial'
include ':doubleconversion'
include ':glog'
include ':libevent'
@@ -24,6 +25,7 @@ project(':fbjni').projectDir = file('libs/fbjni')
project(':easywsclient').projectDir = file('libs/easywsclient')
project(':sonarcpp').projectDir = file('xplat')
project(':sample').projectDir = file('android/sample')
+project(':tutorial').projectDir = file('android/tutorial')
project(':android').projectDir = file('android')
project(':doubleconversion').projectDir = file('android/third-party/external/double-conversion/')
project(':glog').projectDir = file('android/third-party/external/glog/')