diff --git a/app/build.gradle b/app/build.gradle
index 90bb764..6ceb76a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -39,10 +39,12 @@
// Data Binding
kapt 'com.android.databinding:compiler:3.0.1'
- // Android Architecture Components for Lifecycles, LiveData, and ViewModel
+ // Android Architecture Components for Lifecycles, LiveData, Room, and ViewModel
compile "android.arch.lifecycle:runtime:1.1.0"
compile "android.arch.lifecycle:extensions:1.1.0"
annotationProcessor "android.arch.lifecycle:compiler:1.1.0"
+ implementation "android.arch.persistence.room:runtime:1.0.0"
+ annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
// Dagger2
implementation "com.google.dagger:dagger:$dagger_version"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 271f73d..02dcb56 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,6 +17,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskActivity.kt b/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskActivity.kt
new file mode 100644
index 0000000..89797b1
--- /dev/null
+++ b/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskActivity.kt
@@ -0,0 +1,25 @@
+package keijumt.todoapp.addtask
+
+import android.os.Bundle
+import android.support.v4.app.Fragment
+import dagger.android.AndroidInjector
+import dagger.android.support.HasSupportFragmentInjector
+import keijumt.todoapp.BaseActivity
+import keijumt.todoapp.R
+import keijumt.todoapp.di.Injectable
+
+/**
+ * タスク追加のActivity
+ * Created by matsumoto_k on 2018/03/06.
+ */
+class AddEditTaskActivity : BaseActivity(), HasSupportFragmentInjector, Injectable {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_add_edit_task)
+ }
+
+ override fun supportFragmentInjector(): AndroidInjector {
+ return androidInjector
+ }
+}
diff --git a/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskFragment.kt b/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskFragment.kt
new file mode 100644
index 0000000..bc51f0b
--- /dev/null
+++ b/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskFragment.kt
@@ -0,0 +1,29 @@
+package keijumt.todoapp.addtask
+
+import android.arch.lifecycle.ViewModelProviders
+import android.databinding.DataBindingUtil
+import android.os.Bundle
+import android.support.v4.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import keijumt.todoapp.R
+import keijumt.todoapp.databinding.FragmentAddEditTaskBinding
+
+/**
+ * タスク追加のFragment
+ * Created by matsumoto_k on 2018/03/06.
+ */
+class AddEditTaskFragment : Fragment() {
+
+ lateinit var binding: FragmentAddEditTaskBinding
+ lateinit var addEditTaskViewModel: AddEditTaskViewModel
+
+ override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ binding = DataBindingUtil.inflate(inflater, R.layout.fragment_add_edit_task, null, false)
+ addEditTaskViewModel = ViewModelProviders.of(activity).get(AddEditTaskViewModel::class.java)
+ binding.addEditTaskViewModel = addEditTaskViewModel
+ lifecycle.addObserver(addEditTaskViewModel)
+ return binding.root
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskViewModel.kt b/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskViewModel.kt
new file mode 100644
index 0000000..41103ac
--- /dev/null
+++ b/app/src/main/java/keijumt/todoapp/addtask/AddEditTaskViewModel.kt
@@ -0,0 +1,15 @@
+package keijumt.todoapp.addtask
+
+import android.databinding.ObservableField
+import keijumt.todoapp.BaseViewModel
+import javax.inject.Inject
+
+/**
+ * タスク追加のViewModel
+ * Created by matsumoto_k on 2018/03/06.
+ */
+class AddEditTaskViewModel @Inject constructor() : BaseViewModel() {
+
+ val taskTitle = ObservableField()
+ val taskDetails = ObservableField()
+}
\ No newline at end of file
diff --git a/app/src/main/java/keijumt/todoapp/databinding/SingleLiveEvent.kt b/app/src/main/java/keijumt/todoapp/databinding/SingleLiveEvent.kt
new file mode 100644
index 0000000..00a6a81
--- /dev/null
+++ b/app/src/main/java/keijumt/todoapp/databinding/SingleLiveEvent.kt
@@ -0,0 +1,59 @@
+package keijumt.todoapp.databinding
+
+import android.arch.lifecycle.LifecycleOwner
+import android.arch.lifecycle.MutableLiveData
+import android.arch.lifecycle.Observer
+import android.support.annotation.MainThread
+import android.util.Log
+import java.util.concurrent.atomic.AtomicBoolean
+
+/**
+ * A lifecycle-aware observable that sends only new updates after subscription, used for events like
+ * navigation and Snackbar messages.
+ *
+ *
+ * This avoids a common problem with events: on configuration change (like rotation) an update
+ * can be emitted if the observer is active. This LiveData only calls the observable if there's an
+ * explicit call to setValue() or call().
+ *
+ *
+ * Note that only one observer is going to be notified of changes.
+ */
+class SingleLiveEvent : MutableLiveData() {
+
+ private val mPending = AtomicBoolean(false)
+
+ @MainThread
+ override fun observe(owner: LifecycleOwner, observer: Observer) {
+
+ if (hasActiveObservers()) {
+ Log.w(TAG, "Multiple observers registered but only one will be notified of changes.")
+ }
+
+ // Observe the internal MutableLiveData
+ super.observe(owner, Observer { t ->
+ if (mPending.compareAndSet(true, false)) {
+ observer.onChanged(t)
+ }
+ })
+ }
+
+ @MainThread
+ override fun setValue(t: T?) {
+ mPending.set(true)
+ super.setValue(t)
+ }
+
+ /**
+ * Used for cases where T is Void, to make calls cleaner.
+ */
+ @MainThread
+ fun call() {
+ value = null
+ }
+
+ companion object {
+
+ private val TAG = "SingleLiveEvent"
+ }
+}
diff --git a/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt b/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt
index 9d4e7b1..7bf5c2d 100644
--- a/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt
+++ b/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt
@@ -2,6 +2,7 @@
import dagger.Module
import dagger.android.ContributesAndroidInjector
+import keijumt.todoapp.addtask.AddEditTaskActivity
import keijumt.todoapp.main.MainActivity
/**
@@ -12,4 +13,7 @@
@ContributesAndroidInjector
internal abstract fun contributeMainActivity(): MainActivity
+
+ @ContributesAndroidInjector
+ internal abstract fun contributeAddEditActivity(): AddEditTaskActivity
}
\ No newline at end of file
diff --git a/app/src/main/java/keijumt/todoapp/di/FragmentBuildersModule.kt b/app/src/main/java/keijumt/todoapp/di/FragmentBuildersModule.kt
index 174e813..b62d67a 100644
--- a/app/src/main/java/keijumt/todoapp/di/FragmentBuildersModule.kt
+++ b/app/src/main/java/keijumt/todoapp/di/FragmentBuildersModule.kt
@@ -1,10 +1,14 @@
package keijumt.todoapp.di
import dagger.Module
+import dagger.android.ContributesAndroidInjector
+import keijumt.todoapp.addtask.AddEditTaskFragment
/**
* DIするFragment
*/
@Module
abstract class FragmentBuildersModule {
+ @ContributesAndroidInjector
+ abstract fun contributeAddEditTaskFragment(): AddEditTaskFragment
}
\ No newline at end of file
diff --git a/app/src/main/java/keijumt/todoapp/di/ViewModelModule.kt b/app/src/main/java/keijumt/todoapp/di/ViewModelModule.kt
index b6e0bc4..a6413ba 100644
--- a/app/src/main/java/keijumt/todoapp/di/ViewModelModule.kt
+++ b/app/src/main/java/keijumt/todoapp/di/ViewModelModule.kt
@@ -5,6 +5,7 @@
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
+import keijumt.todoapp.addtask.AddEditTaskViewModel
import keijumt.todoapp.main.MainViewModel
/**
@@ -19,5 +20,11 @@
internal abstract fun bindMainViewModel(mainViewModel: MainViewModel): ViewModel
@Binds
+ @IntoMap
+ @ViewModelKey(AddEditTaskViewModel::class)
+ internal abstract fun bindAddTaskViewModel(addTaskViewModel: AddEditTaskViewModel): ViewModel
+
+
+ @Binds
internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
}
\ No newline at end of file
diff --git a/app/src/main/java/keijumt/todoapp/main/MainActivity.kt b/app/src/main/java/keijumt/todoapp/main/MainActivity.kt
index f7f05f0..a1a6a14 100644
--- a/app/src/main/java/keijumt/todoapp/main/MainActivity.kt
+++ b/app/src/main/java/keijumt/todoapp/main/MainActivity.kt
@@ -1,6 +1,8 @@
package keijumt.todoapp.main
+import android.arch.lifecycle.Observer
import android.arch.lifecycle.ViewModelProviders
+import android.content.Intent
import android.databinding.DataBindingUtil
import android.os.Bundle
import android.support.v4.app.Fragment
@@ -8,6 +10,7 @@
import dagger.android.support.HasSupportFragmentInjector
import keijumt.todoapp.BaseActivity
import keijumt.todoapp.R
+import keijumt.todoapp.addtask.AddEditTaskActivity
import keijumt.todoapp.databinding.ActivityMainBinding
import keijumt.todoapp.di.Injectable
@@ -24,7 +27,15 @@
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
mainViewModel = ViewModelProviders.of(this, viewModelFactory).get(MainViewModel::class.java)
+ binding.viewModel = mainViewModel
lifecycle.addObserver(mainViewModel)
+ subscribe()
+ }
+
+ fun subscribe() {
+ mainViewModel.newTaskEvent.observe(this, Observer {
+ startActivity(Intent(this, AddEditTaskActivity::class.java))
+ })
}
override fun supportFragmentInjector(): AndroidInjector {
diff --git a/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt b/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt
index cb17245..c3dc875 100644
--- a/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt
+++ b/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt
@@ -1,6 +1,7 @@
package keijumt.todoapp.main
import keijumt.todoapp.BaseViewModel
+import keijumt.todoapp.databinding.SingleLiveEvent
import javax.inject.Inject
/**
@@ -8,4 +9,13 @@
* Created by matsumoto_k on 2018/03/06.
*/
class MainViewModel @Inject constructor() : BaseViewModel() {
+
+ val newTaskEvent = SingleLiveEvent()
+
+ /**
+ * タスク追加(fab)クリック
+ */
+ fun onClickNewTask() {
+ newTaskEvent.call()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/ic_add.png b/app/src/main/res/drawable-hdpi/ic_add.png
new file mode 100644
index 0000000..e74eccf
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_add.png
Binary files differ
diff --git a/app/src/main/res/drawable-hdpi/ic_check.png b/app/src/main/res/drawable-hdpi/ic_check.png
new file mode 100644
index 0000000..947bfcc
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_check.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/ic_add.png b/app/src/main/res/drawable-mdpi/ic_add.png
new file mode 100644
index 0000000..41784d3
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_add.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/ic_check.png b/app/src/main/res/drawable-mdpi/ic_check.png
new file mode 100644
index 0000000..9acf69d
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_check.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_add.png b/app/src/main/res/drawable-xhdpi/ic_add.png
new file mode 100644
index 0000000..ac17961
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_add.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_check.png b/app/src/main/res/drawable-xhdpi/ic_check.png
new file mode 100644
index 0000000..d6880cd
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_check.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_add.png b/app/src/main/res/drawable-xxhdpi/ic_add.png
new file mode 100644
index 0000000..876df78
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_add.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_check.png b/app/src/main/res/drawable-xxhdpi/ic_check.png
new file mode 100644
index 0000000..610875c
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_check.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_add_edit_task.xml b/app/src/main/res/layout/activity_add_edit_task.xml
new file mode 100644
index 0000000..4688e3e
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_edit_task.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d1dcfef..ba87699 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,6 @@
-
+
@@ -12,5 +13,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_edit_task.xml b/app/src/main/res/layout/fragment_add_edit_task.xml
new file mode 100644
index 0000000..18a1c1a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_add_edit_task.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 06baf8c..d155284 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,5 @@
ToDoApp
+ Task title
+ Task details