From 44e587fd0fd599f67d67c4ccabcfc2c99a835ad2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de>
Date: Sat, 26 Jun 2021 08:32:53 +0200
Subject: [PATCH] Add dagger, a simple component and view model

---
 mailbox/build.gradle                                 |  4 +++-
 mailbox/src/main/AndroidManifest.xml                 |  1 +
 .../org/briarproject/mailbox/ApplicationComponent.kt | 10 ++++++++++
 .../org/briarproject/mailbox/MailboxApplication.kt   |  9 +++++++++
 .../org/briarproject/mailbox/MailboxViewModel.kt     |  9 +++++++++
 .../java/org/briarproject/mailbox/MainActivity.kt    | 12 ++++++++++++
 mailbox/src/main/res/layout/activity_main.xml        |  1 +
 7 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100644 mailbox/src/main/java/org/briarproject/mailbox/ApplicationComponent.kt
 create mode 100644 mailbox/src/main/java/org/briarproject/mailbox/MailboxApplication.kt
 create mode 100644 mailbox/src/main/java/org/briarproject/mailbox/MailboxViewModel.kt

diff --git a/mailbox/build.gradle b/mailbox/build.gradle
index b6dfa93a..9806eb65 100644
--- a/mailbox/build.gradle
+++ b/mailbox/build.gradle
@@ -1,6 +1,7 @@
 plugins {
     id 'com.android.application'
     id 'kotlin-android'
+    id 'kotlin-kapt'
 }
 
 android {
@@ -33,8 +34,9 @@ android {
 }
 
 dependencies {
-
     implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+    implementation 'com.google.dagger:dagger:2.37'
+    kapt 'com.google.dagger:dagger-compiler:2.37'
     implementation 'androidx.appcompat:appcompat:1.0.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     testImplementation 'junit:junit:4.+'
diff --git a/mailbox/src/main/AndroidManifest.xml b/mailbox/src/main/AndroidManifest.xml
index b60125e9..50353209 100644
--- a/mailbox/src/main/AndroidManifest.xml
+++ b/mailbox/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
     package="org.briarproject.mailbox">
 
     <application
+        android:name=".MailboxApplication"
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
diff --git a/mailbox/src/main/java/org/briarproject/mailbox/ApplicationComponent.kt b/mailbox/src/main/java/org/briarproject/mailbox/ApplicationComponent.kt
new file mode 100644
index 00000000..18af8862
--- /dev/null
+++ b/mailbox/src/main/java/org/briarproject/mailbox/ApplicationComponent.kt
@@ -0,0 +1,10 @@
+package org.briarproject.mailbox
+
+import dagger.Component
+
+@Component
+interface ApplicationComponent {
+
+    fun inject(activity: MainActivity)
+
+}
\ No newline at end of file
diff --git a/mailbox/src/main/java/org/briarproject/mailbox/MailboxApplication.kt b/mailbox/src/main/java/org/briarproject/mailbox/MailboxApplication.kt
new file mode 100644
index 00000000..fdd09a27
--- /dev/null
+++ b/mailbox/src/main/java/org/briarproject/mailbox/MailboxApplication.kt
@@ -0,0 +1,9 @@
+package org.briarproject.mailbox
+
+import android.app.Application
+
+class MailboxApplication : Application() {
+
+    val appComponent = DaggerApplicationComponent.create()
+
+}
\ No newline at end of file
diff --git a/mailbox/src/main/java/org/briarproject/mailbox/MailboxViewModel.kt b/mailbox/src/main/java/org/briarproject/mailbox/MailboxViewModel.kt
new file mode 100644
index 00000000..be4b4faf
--- /dev/null
+++ b/mailbox/src/main/java/org/briarproject/mailbox/MailboxViewModel.kt
@@ -0,0 +1,9 @@
+package org.briarproject.mailbox
+
+import javax.inject.Inject
+
+class MailboxViewModel @Inject constructor() {
+
+    val text = "Hello Mailbox";
+
+}
\ No newline at end of file
diff --git a/mailbox/src/main/java/org/briarproject/mailbox/MainActivity.kt b/mailbox/src/main/java/org/briarproject/mailbox/MainActivity.kt
index 631e5e91..04d715a3 100644
--- a/mailbox/src/main/java/org/briarproject/mailbox/MainActivity.kt
+++ b/mailbox/src/main/java/org/briarproject/mailbox/MainActivity.kt
@@ -2,10 +2,22 @@ package org.briarproject.mailbox
 
 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
+import android.widget.TextView
+import javax.inject.Inject
 
 class MainActivity : AppCompatActivity() {
+
+    lateinit var applicationComponent: ApplicationComponent
+
+    @Inject
+    lateinit var mailboxViewModel: MailboxViewModel
+
     override fun onCreate(savedInstanceState: Bundle?) {
+        (applicationContext as MailboxApplication).appComponent.inject(this)
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
+
+        val textView = findViewById<TextView>(R.id.text)
+        textView.setText(mailboxViewModel.text)
     }
 }
\ No newline at end of file
diff --git a/mailbox/src/main/res/layout/activity_main.xml b/mailbox/src/main/res/layout/activity_main.xml
index 4fc24441..18428a36 100644
--- a/mailbox/src/main/res/layout/activity_main.xml
+++ b/mailbox/src/main/res/layout/activity_main.xml
@@ -7,6 +7,7 @@
     tools:context=".MainActivity">
 
     <TextView
+        android:id="@+id/text"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Hello World!"
-- 
GitLab