diff --git a/README.md b/README.md index 70744e8..6453e70 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Add **Utilities** to your Android project using Jitpack and Gradle: } ... dependencies { - implementation 'com.github.Sub6Resources:Utilities:1.4.3' + implementation 'com.github.Sub6Resources:Utilities:1.5.0' } ## `BaseActivity` diff --git a/app/src/main/java/com/sub6resources/utilities/BaseActivity.kt b/app/src/main/java/com/sub6resources/utilities/BaseActivity.kt index a76320a..a72b55c 100644 --- a/app/src/main/java/com/sub6resources/utilities/BaseActivity.kt +++ b/app/src/main/java/com/sub6resources/utilities/BaseActivity.kt @@ -2,6 +2,7 @@ package com.sub6resources.utilities import android.Manifest import android.arch.lifecycle.ViewModel +import android.arch.lifecycle.ViewModelProvider import android.arch.lifecycle.ViewModelProviders import android.content.Intent import android.content.pm.PackageManager @@ -18,6 +19,7 @@ import android.support.v7.app.AppCompatActivity import android.view.Menu import android.view.MenuItem import android.view.View +import org.koin.android.architecture.ext.KoinFactory abstract class BaseActivity(private val activityLayout: Int): AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { @@ -290,5 +292,9 @@ abstract class BaseActivity(private val activityLayout: Int): AppCompatActivity( app.savedCallbacks[requestCode](resultCode, data) } + @Deprecated("Deprecated in favor of getViewModel()") fun getViewModel(javaClass: Class): Lazy = lazy { ViewModelProviders.of(this).get(javaClass) } + + inline fun getViewModel(): Lazy = lazy { ViewModelProvider(this, KoinFactory).get(T::class.java) } + inline fun getGlobalViewModel(): Lazy = lazy { ViewModelProvider(app, KoinFactory).get(T::class.java) } } \ No newline at end of file diff --git a/app/src/main/java/com/sub6resources/utilities/BaseApplication.kt b/app/src/main/java/com/sub6resources/utilities/BaseApplication.kt index 138469c..e1ccdf1 100644 --- a/app/src/main/java/com/sub6resources/utilities/BaseApplication.kt +++ b/app/src/main/java/com/sub6resources/utilities/BaseApplication.kt @@ -1,11 +1,13 @@ package com.sub6resources.utilities import android.app.Application +import android.arch.lifecycle.ViewModelStore +import android.arch.lifecycle.ViewModelStoreOwner import android.content.Intent import org.koin.android.ext.android.startKoin import org.koin.dsl.module.Module -open class BaseApplication(vararg val modules: Module): Application() { +open class BaseApplication(vararg val modules: Module): Application(), ViewModelStoreOwner { var savedCallbacks = ArrayList<(resultCode: Int, data: Intent?) -> Unit>() @@ -14,4 +16,12 @@ open class BaseApplication(vararg val modules: Module): Application() { SharedPrefs.sharedPreferences = sharedPreferences startKoin(this, modules.toList()) } + + private val appViewModelStore: ViewModelStore by lazy { + ViewModelStore() + } + + override fun getViewModelStore(): ViewModelStore { + return appViewModelStore + } } \ No newline at end of file diff --git a/app/src/main/java/com/sub6resources/utilities/BaseFragment.kt b/app/src/main/java/com/sub6resources/utilities/BaseFragment.kt index cd1a5c5..edaf5df 100644 --- a/app/src/main/java/com/sub6resources/utilities/BaseFragment.kt +++ b/app/src/main/java/com/sub6resources/utilities/BaseFragment.kt @@ -6,8 +6,6 @@ import android.arch.lifecycle.ViewModelProviders import android.arch.lifecycle.ViewModelStores import android.os.Bundle import android.support.v4.app.Fragment -import android.support.v4.app.FragmentActivity -import android.support.v7.widget.Toolbar import android.view.* import org.koin.android.architecture.ext.KoinFactory import org.koin.android.architecture.ext.getViewModel @@ -87,5 +85,7 @@ abstract class BaseFragment: Fragment() { @Deprecated("getSharedViewModel(T::class.java) is deprecated in favor of getSharedViewModel()") fun getSharedViewModel(javaClass: Class): Lazy = lazy { ViewModelProviders.of(activity!!).get(javaClass) } - inline fun Fragment.getSharedViewModel(): T = ViewModelProvider(ViewModelStores.of(this.activity!!), KoinFactory).get(T::class.java) + inline fun Fragment.getSharedViewModel(): Lazy = lazy { ViewModelProvider(ViewModelStores.of(baseActivity), KoinFactory).get(T::class.java) } + + inline fun getGlobalViewModel(): Lazy = lazy { ViewModelProvider(baseActivity.app, KoinFactory).get(T::class.java) } } \ No newline at end of file diff --git a/sample/src/main/java/com/sub6resources/utilities/sample/MainActivity.kt b/sample/src/main/java/com/sub6resources/utilities/sample/MainActivity.kt index fabadd8..82d9dff 100644 --- a/sample/src/main/java/com/sub6resources/utilities/sample/MainActivity.kt +++ b/sample/src/main/java/com/sub6resources/utilities/sample/MainActivity.kt @@ -2,8 +2,13 @@ package com.sub6resources.utilities.sample import com.sub6resources.utilities.BaseActivity import com.sub6resources.utilities.sample.fragments.LoginFragment +import com.sub6resources.utilities.sample.viewmodels.LoginViewModel class MainActivity : BaseActivity(R.layout.activity_fragment_container) { + + //Has no purpose, just a test. + val viewModel by getGlobalViewModel() + override val fragmentTargets = R.id.fragmentTarget override val landingFragment = LoginFragment() } \ No newline at end of file diff --git a/sample/src/main/java/com/sub6resources/utilities/sample/fragments/LoginFragment.kt b/sample/src/main/java/com/sub6resources/utilities/sample/fragments/LoginFragment.kt index e4a2b2a..92abb5f 100644 --- a/sample/src/main/java/com/sub6resources/utilities/sample/fragments/LoginFragment.kt +++ b/sample/src/main/java/com/sub6resources/utilities/sample/fragments/LoginFragment.kt @@ -18,12 +18,12 @@ import kotlinx.android.synthetic.main.fragment_login.* class LoginFragment: BaseFragment() { override val fragLayout = R.layout.fragment_login - val loginViewModel by getViewModel() + val loginViewModel by getGlobalViewModel() override fun setUp() { btn_submit.onClick { -// loginViewModel.login(Login(et_username.getString(), et_password.getString())) + loginViewModel.login(Login(et_username.getString(), et_password.getString())) baseActivity.startActivity() } @@ -34,10 +34,10 @@ class LoginFragment: BaseFragment() { loginViewModel.token.observe(this, Observer { token -> Log.d("TOKEN", "Token!!! ${token?.token}") // baseActivity.startActivity() - val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE); - baseActivity.startActivityForResult(takePictureIntent) { resultCode, data -> +// val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE); +// baseActivity.startActivityForResult(takePictureIntent) { resultCode, data -> //Perform operations on the result code and the data here - } +// } }) } } \ No newline at end of file