diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3e61b0b..271f73d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,7 +10,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/keijumt/todoapp/BaseActivity.kt b/app/src/main/java/keijumt/todoapp/BaseActivity.kt new file mode 100644 index 0000000..285a077 --- /dev/null +++ b/app/src/main/java/keijumt/todoapp/BaseActivity.kt @@ -0,0 +1,20 @@ +package keijumt.todoapp + +import android.support.v4.app.Fragment +import android.support.v7.app.AppCompatActivity +import dagger.android.DispatchingAndroidInjector +import keijumt.todoapp.di.ViewModelFactory +import javax.inject.Inject + +/** + * Activityの基底クラス + * Created by matsumoto_k on 2018/03/06. + */ +abstract class BaseActivity : AppCompatActivity() { + + @Inject + lateinit var androidInjector: DispatchingAndroidInjector + + @Inject + lateinit var viewModelFactory: ViewModelFactory +} \ No newline at end of file diff --git a/app/src/main/java/keijumt/todoapp/BaseViewModel.kt b/app/src/main/java/keijumt/todoapp/BaseViewModel.kt new file mode 100644 index 0000000..ed0a428 --- /dev/null +++ b/app/src/main/java/keijumt/todoapp/BaseViewModel.kt @@ -0,0 +1,36 @@ +package keijumt.todoapp + +import android.arch.lifecycle.Lifecycle +import android.arch.lifecycle.LifecycleObserver +import android.arch.lifecycle.OnLifecycleEvent +import android.arch.lifecycle.ViewModel + +/** + * ViewModelの基底クラス + * Created by matsumoto_k on 2018/03/06. + */ +abstract class BaseViewModel : ViewModel(), LifecycleObserver { + @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) + open fun onCreate() { + } + + @OnLifecycleEvent(Lifecycle.Event.ON_START) + open fun onStart() { + } + + @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) + open fun onResume() { + } + + @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) + open fun onPause() { + } + + @OnLifecycleEvent(Lifecycle.Event.ON_STOP) + open fun onStop() { + } + + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + open fun onDestroy() { + } +} \ No newline at end of file diff --git a/app/src/main/java/keijumt/todoapp/MainActivity.kt b/app/src/main/java/keijumt/todoapp/MainActivity.kt deleted file mode 100644 index 6476b18..0000000 --- a/app/src/main/java/keijumt/todoapp/MainActivity.kt +++ /dev/null @@ -1,33 +0,0 @@ -package keijumt.todoapp - -import android.arch.lifecycle.ViewModelProviders -import android.databinding.DataBindingUtil -import android.os.Bundle -import android.support.v4.app.Fragment -import dagger.android.AndroidInjector -import dagger.android.support.HasSupportFragmentInjector -import keijumt.todoapp.activity.BaseActivity -import keijumt.todoapp.databinding.ActivityMainBinding -import keijumt.todoapp.di.Injectable -import keijumt.todoapp.viewmodel.MainViewModel - -/** - * メイン画面のActivity - * Created by matsumoto_k on 2018/03/06. - */ -class MainActivity : BaseActivity(), HasSupportFragmentInjector, Injectable { - - lateinit var binding: ActivityMainBinding - lateinit var mainViewModel: MainViewModel - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this, R.layout.activity_main) - mainViewModel = ViewModelProviders.of(this, viewModelFactory).get(MainViewModel::class.java) - lifecycle.addObserver(mainViewModel) - } - - override fun supportFragmentInjector(): AndroidInjector { - return androidInjector - } -} diff --git a/app/src/main/java/keijumt/todoapp/activity/BaseActivity.kt b/app/src/main/java/keijumt/todoapp/activity/BaseActivity.kt deleted file mode 100644 index b66a967..0000000 --- a/app/src/main/java/keijumt/todoapp/activity/BaseActivity.kt +++ /dev/null @@ -1,20 +0,0 @@ -package keijumt.todoapp.activity - -import android.support.v4.app.Fragment -import android.support.v7.app.AppCompatActivity -import dagger.android.DispatchingAndroidInjector -import keijumt.todoapp.viewmodel.ViewModelFactory -import javax.inject.Inject - -/** - * Activityの基底クラス - * Created by matsumoto_k on 2018/03/06. - */ -abstract class BaseActivity : AppCompatActivity() { - - @Inject - lateinit var androidInjector: DispatchingAndroidInjector - - @Inject - lateinit var viewModelFactory: ViewModelFactory -} \ No newline at end of file diff --git a/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt b/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt index 6e2bf9d..9d4e7b1 100644 --- a/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt +++ b/app/src/main/java/keijumt/todoapp/di/ActivityModule.kt @@ -2,7 +2,7 @@ import dagger.Module import dagger.android.ContributesAndroidInjector -import keijumt.todoapp.MainActivity +import keijumt.todoapp.main.MainActivity /** * DIするActivity diff --git a/app/src/main/java/keijumt/todoapp/di/ViewModelFactory.kt b/app/src/main/java/keijumt/todoapp/di/ViewModelFactory.kt new file mode 100644 index 0000000..2b85fcf --- /dev/null +++ b/app/src/main/java/keijumt/todoapp/di/ViewModelFactory.kt @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package keijumt.todoapp.di + +import android.arch.lifecycle.ViewModel +import android.arch.lifecycle.ViewModelProvider +import javax.inject.Inject +import javax.inject.Provider + +class ViewModelFactory @Inject constructor(private val creators: Map, @JvmSuppressWildcards Provider>) + : ViewModelProvider.Factory { + + @Suppress("UNCHECKED_CAST") + override fun create(modelClass: Class): T { + var creator: Provider? = creators[modelClass] + if (creator == null) { + for ((key, value) in creators) { + if (modelClass.isAssignableFrom(key)) { + creator = value + break + } + } + } + if (creator == null) throw IllegalArgumentException("unknown model class " + modelClass) + try { + return creator.get() as T + } catch (e: Exception) { + throw RuntimeException(e) + } + } +} \ 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 21e8bc7..b6e0bc4 100644 --- a/app/src/main/java/keijumt/todoapp/di/ViewModelModule.kt +++ b/app/src/main/java/keijumt/todoapp/di/ViewModelModule.kt @@ -5,8 +5,7 @@ import dagger.Binds import dagger.Module import dagger.multibindings.IntoMap -import keijumt.todoapp.viewmodel.MainViewModel -import keijumt.todoapp.viewmodel.ViewModelFactory +import keijumt.todoapp.main.MainViewModel /** * DIするViewModel diff --git a/app/src/main/java/keijumt/todoapp/main/MainActivity.kt b/app/src/main/java/keijumt/todoapp/main/MainActivity.kt new file mode 100644 index 0000000..f7f05f0 --- /dev/null +++ b/app/src/main/java/keijumt/todoapp/main/MainActivity.kt @@ -0,0 +1,33 @@ +package keijumt.todoapp.main + +import android.arch.lifecycle.ViewModelProviders +import android.databinding.DataBindingUtil +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.databinding.ActivityMainBinding +import keijumt.todoapp.di.Injectable + +/** + * メイン画面のActivity + * Created by matsumoto_k on 2018/03/06. + */ +class MainActivity : BaseActivity(), HasSupportFragmentInjector, Injectable { + + lateinit var binding: ActivityMainBinding + lateinit var mainViewModel: MainViewModel + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, R.layout.activity_main) + mainViewModel = ViewModelProviders.of(this, viewModelFactory).get(MainViewModel::class.java) + lifecycle.addObserver(mainViewModel) + } + + override fun supportFragmentInjector(): AndroidInjector { + return androidInjector + } +} diff --git a/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt b/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt new file mode 100644 index 0000000..cb17245 --- /dev/null +++ b/app/src/main/java/keijumt/todoapp/main/MainViewModel.kt @@ -0,0 +1,11 @@ +package keijumt.todoapp.main + +import keijumt.todoapp.BaseViewModel +import javax.inject.Inject + +/** + * メイン画面のViewModel + * Created by matsumoto_k on 2018/03/06. + */ +class MainViewModel @Inject constructor() : BaseViewModel() { +} \ No newline at end of file diff --git a/app/src/main/java/keijumt/todoapp/viewmodel/BaseViewModel.kt b/app/src/main/java/keijumt/todoapp/viewmodel/BaseViewModel.kt deleted file mode 100644 index dcad4c4..0000000 --- a/app/src/main/java/keijumt/todoapp/viewmodel/BaseViewModel.kt +++ /dev/null @@ -1,36 +0,0 @@ -package keijumt.todoapp.viewmodel - -import android.arch.lifecycle.Lifecycle -import android.arch.lifecycle.LifecycleObserver -import android.arch.lifecycle.OnLifecycleEvent -import android.arch.lifecycle.ViewModel - -/** - * ViewModelの基底クラス - * Created by matsumoto_k on 2018/03/06. - */ -abstract class BaseViewModel : ViewModel(), LifecycleObserver { - @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) - open fun onCreate() { - } - - @OnLifecycleEvent(Lifecycle.Event.ON_START) - open fun onStart() { - } - - @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) - open fun onResume() { - } - - @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) - open fun onPause() { - } - - @OnLifecycleEvent(Lifecycle.Event.ON_STOP) - open fun onStop() { - } - - @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) - open fun onDestroy() { - } -} \ No newline at end of file diff --git a/app/src/main/java/keijumt/todoapp/viewmodel/MainViewModel.kt b/app/src/main/java/keijumt/todoapp/viewmodel/MainViewModel.kt deleted file mode 100644 index 5106bde..0000000 --- a/app/src/main/java/keijumt/todoapp/viewmodel/MainViewModel.kt +++ /dev/null @@ -1,10 +0,0 @@ -package keijumt.todoapp.viewmodel - -import javax.inject.Inject - -/** - * メイン画面のViewModel - * Created by matsumoto_k on 2018/03/06. - */ -class MainViewModel @Inject constructor() : BaseViewModel() { -} \ No newline at end of file diff --git a/app/src/main/java/keijumt/todoapp/viewmodel/ViewModelFactory.kt b/app/src/main/java/keijumt/todoapp/viewmodel/ViewModelFactory.kt deleted file mode 100644 index 5eaeecb..0000000 --- a/app/src/main/java/keijumt/todoapp/viewmodel/ViewModelFactory.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package keijumt.todoapp.viewmodel - -import android.arch.lifecycle.ViewModel -import android.arch.lifecycle.ViewModelProvider -import javax.inject.Inject -import javax.inject.Provider - -class ViewModelFactory @Inject constructor(private val creators: Map, @JvmSuppressWildcards Provider>) - : ViewModelProvider.Factory { - - @Suppress("UNCHECKED_CAST") - override fun create(modelClass: Class): T { - var creator: Provider? = creators[modelClass] - if (creator == null) { - for ((key, value) in creators) { - if (modelClass.isAssignableFrom(key)) { - creator = value - break - } - } - } - if (creator == null) throw IllegalArgumentException("unknown model class " + modelClass) - try { - return creator.get() as T - } catch (e: Exception) { - throw RuntimeException(e) - } - } -} \ 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 25ca29b..d1dcfef 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,7 +5,7 @@ + type="keijumt.todoapp.main.MainViewModel" />