diff --git a/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/InFullMvpDialogFragment.kt b/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/InFullMvpDialogFragment.kt new file mode 100644 index 0000000..a963f49 --- /dev/null +++ b/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/InFullMvpDialogFragment.kt @@ -0,0 +1,39 @@ +package com.infullmobile.android.infullmvp + +import android.app.Dialog +import android.os.Bundle +import android.support.annotation.CallSuper +import android.support.v4.app.DialogFragment +import android.view.MenuItem +import android.view.View +import org.koin.android.scope.ext.android.bindScope +import org.koin.android.scope.ext.android.getOrCreateScope + +abstract class InFullMvpDialogFragment, PresenterType : InFullMvpPresenter<*>> + : DialogFragment() { + + abstract val presenter: PresenterType + abstract val presentedView: PresentedViewType + + @CallSuper + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + bindScope(getOrCreateScope(presentedView.scopeName)) + } + + override fun setupDialog(dialog: Dialog, style: Int) { + /* + Method is group restricted via @hide and @Restricted in source + but we can still call it from kotlin. + This may change with further kotlin plugin support. + */ + super.setupDialog(dialog, style) + dialog.setContentView(View.inflate(context, presentedView.layoutId, null)) + presenter.bind(arguments ?: Bundle(), Bundle(), activity!!.intent.data) + presentedView.bindView(presenter) + } + + override fun onContextItemSelected(item: MenuItem): Boolean { + return presenter.onContextItemSelected(item) || super.onContextItemSelected(item) + } +} \ No newline at end of file diff --git a/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedDialogFragmentView.kt b/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedDialogFragmentView.kt new file mode 100644 index 0000000..525e9dd --- /dev/null +++ b/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedDialogFragmentView.kt @@ -0,0 +1,18 @@ +package com.infullmobile.android.infullmvp + +import android.content.Context +import android.support.v4.app.DialogFragment +import android.view.View + + +abstract class PresentedDialogFragmentView>( + private val dialogFragment: DialogFragment) + : PresentedView() { + + override val context: Context + get() = dialogFragment.dialog.context + ?: throw IllegalStateException("This presentedView fragment is not connected to context") + override val containerView: View + get() = dialogFragment.dialog.window!!.decorView + ?: throw IllegalStateException("This presentedView fragment is not connected to view") +} \ No newline at end of file diff --git a/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedFragmentView.kt b/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedFragmentView.kt index 5cc17e6..891c2a2 100644 --- a/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedFragmentView.kt +++ b/infullmvp-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/PresentedFragmentView.kt @@ -14,5 +14,5 @@ abstract class PresentedFragmentView>( ?: throw IllegalStateException("This presentedView fragment is not connected to context") override val containerView: View get() = fragment.view - ?: throw IllegalStateException("This presentedView fragment is not connected to context") + ?: throw IllegalStateException("This presentedView fragment is not connected to view") } \ No newline at end of file diff --git a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinDi.kt b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinDi.kt index bfc65b6..eab421c 100644 --- a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinDi.kt +++ b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinDi.kt @@ -1,6 +1,7 @@ package com.infullmobile.android.infullmvp.sample.activity import android.support.v7.app.AppCompatActivity +import com.infullmobile.android.infullmvp.sample.dialogFragment.SampleDialogFragment import org.koin.dsl.module.module const val sampleKoinActivityScopeName = "sampleKoinActivityScopeName" @@ -8,4 +9,7 @@ val sampleKoinActivityModule = module(sampleKoinActivityScopeName) { factory { (activity: AppCompatActivity) -> SampleKoinView(activity) } factory { (activity: SampleKoinActivity) -> SampleKoinPresenter(activity.presentedView, get()) } factory { (activity: SampleKoinActivity) -> TwoSimplePagesAdapter(activity.supportFragmentManager) } + + factory { (activity: AppCompatActivity) -> activity.supportFragmentManager } + factory { SampleDialogFragment() } } \ No newline at end of file diff --git a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinView.kt b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinView.kt index 869ce5f..eb56617 100644 --- a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinView.kt +++ b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/activity/SampleKoinView.kt @@ -1,10 +1,12 @@ package com.infullmobile.android.infullmvp.sample.activity import android.content.Intent +import android.support.v4.app.FragmentManager import android.support.v7.app.AppCompatActivity import com.infullmobile.android.infullmvp.PresentedActivityView import com.infullmobile.android.infullmvp.inject import com.infullmobile.android.infullmvp.sample.R +import com.infullmobile.android.infullmvp.sample.dialogFragment.SampleDialogFragment import com.infullmobile.android.infullmvp.sample.mvpCardActivity.MvpCardActivity import kotlinx.android.synthetic.main.activity_sample.* import org.koin.core.parameter.parametersOf @@ -14,11 +16,16 @@ class SampleKoinView(activity: AppCompatActivity) : PresentedActivityView() { + + override val presenter: SampleDialogFragmentPresenter by inject { parametersOf(this) } + override val presentedView: SampleDialogFragmentView by inject { parametersOf(this) } + +} \ No newline at end of file diff --git a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleDialogFragmentPresenter.kt b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleDialogFragmentPresenter.kt new file mode 100644 index 0000000..0bd1b4b --- /dev/null +++ b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleDialogFragmentPresenter.kt @@ -0,0 +1,15 @@ +package com.infullmobile.android.infullmvp.sample.dialogFragment + +import android.net.Uri +import android.os.Bundle +import com.infullmobile.android.infullmvp.InFullMvpPresenter +import com.infullmobile.android.infullmvp.sample.R + +class SampleDialogFragmentPresenter(view: SampleDialogFragmentView) + : InFullMvpPresenter(view) { + + override fun bind(intentBundle: Bundle, savedInstanceState: Bundle, intentData: Uri?) { + view.updateText(view.context.getString(R.string.im_custom_dialog)) + } + +} \ No newline at end of file diff --git a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleDialogFragmentView.kt b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleDialogFragmentView.kt new file mode 100644 index 0000000..87a7129 --- /dev/null +++ b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleDialogFragmentView.kt @@ -0,0 +1,15 @@ +package com.infullmobile.android.infullmvp.sample.dialogFragment + +import android.support.v4.app.DialogFragment +import com.infullmobile.android.infullmvp.PresentedDialogFragmentView +import com.infullmobile.android.infullmvp.sample.R +import kotlinx.android.synthetic.main.fragment_sample.* + +class SampleDialogFragmentView(fragment: DialogFragment) : PresentedDialogFragmentView(fragment) { + override val scopeName = sampleDialogFragmentScopeName + override val layoutId = R.layout.fragment_sample + + fun updateText(text: String) { + fragmentTextContainer.text = text + } +} \ No newline at end of file diff --git a/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleFragmentDi.kt b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleFragmentDi.kt new file mode 100644 index 0000000..374f0c8 --- /dev/null +++ b/sample-kotlin-koin/src/main/java/com/infullmobile/android/infullmvp/sample/dialogFragment/SampleFragmentDi.kt @@ -0,0 +1,9 @@ +package com.infullmobile.android.infullmvp.sample.dialogFragment + +import org.koin.dsl.module.module + +const val sampleDialogFragmentScopeName = "sampleDialogFragmentScopeName" +val sampleDialogFragmentModule = module(sampleDialogFragmentScopeName) { + factory { (fragment: SampleDialogFragment) -> SampleDialogFragmentPresenter(fragment.presentedView) } + factory { (fragment: SampleDialogFragment) -> SampleDialogFragmentView(fragment) } +} \ No newline at end of file diff --git a/sample-kotlin-koin/src/main/res/layout/activity_sample.xml b/sample-kotlin-koin/src/main/res/layout/activity_sample.xml index bb12a0e..9c3cb6a 100644 --- a/sample-kotlin-koin/src/main/res/layout/activity_sample.xml +++ b/sample-kotlin-koin/src/main/res/layout/activity_sample.xml @@ -15,6 +15,15 @@ android:layout_height="0dp" android:layout_weight="1"/> +