Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<out PresentedViewType : PresentedView<PresenterType>, 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)
}
}
Original file line number Diff line number Diff line change
@@ -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<PresenterType : InFullMvpPresenter<*>>(
private val dialogFragment: DialogFragment)
: PresentedView<PresenterType>() {

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")
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ abstract class PresentedFragmentView<PresenterType : InFullMvpPresenter<*>>(
?: 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")
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
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"
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() }
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -14,11 +16,16 @@ class SampleKoinView(activity: AppCompatActivity) : PresentedActivityView<Sample
override val layoutId = R.layout.activity_sample

private val twoPagesAdapter: TwoSimplePagesAdapter by inject { parametersOf(context) }
private val dialogFragment: SampleDialogFragment by inject { parametersOf(context) }
private val fragmentManager: FragmentManager by inject { parametersOf(context) }

override fun onViewBound() {
showCustomView.setOnClickListener {
presenter.openCustomViewActivity()
}
showDialog.setOnClickListener {
dialogFragment.show(fragmentManager, "Dialog")
}
pagesContainer.adapter = twoPagesAdapter
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.infullmobile.android.infullmvp.sample.application
import android.app.Application
import com.infullmobile.android.infullmvp.inject
import com.infullmobile.android.infullmvp.sample.activity.sampleKoinActivityModule
import com.infullmobile.android.infullmvp.sample.dialogFragment.sampleDialogFragmentModule
import com.infullmobile.android.infullmvp.sample.mvpCardActivity.sampleActivity2Module
import com.infullmobile.android.infullmvp.sample.temperatureCard.temperatureCardModule
import com.infullmobile.android.infullmvp.sample.fragment.sampleFragmentModule
Expand All @@ -17,7 +18,8 @@ val allModules = listOf(
sampleKoinActivityModule,
sampleActivity2Module,
sampleFragmentModule,
temperatureCardModule
temperatureCardModule,
sampleDialogFragmentModule
)

class SampleApplication : Application() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.infullmobile.android.infullmvp.sample.dialogFragment

import com.infullmobile.android.infullmvp.InFullMvpDialogFragment
import org.koin.android.ext.android.inject
import org.koin.core.parameter.parametersOf

class SampleDialogFragment : InFullMvpDialogFragment<SampleDialogFragmentView, SampleDialogFragmentPresenter>() {

override val presenter: SampleDialogFragmentPresenter by inject { parametersOf(this) }
override val presentedView: SampleDialogFragmentView by inject { parametersOf(this) }

}
Original file line number Diff line number Diff line change
@@ -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<SampleDialogFragmentView>(view) {

override fun bind(intentBundle: Bundle, savedInstanceState: Bundle, intentData: Uri?) {
view.updateText(view.context.getString(R.string.im_custom_dialog))
}

}
Original file line number Diff line number Diff line change
@@ -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<SampleDialogFragmentPresenter>(fragment) {
override val scopeName = sampleDialogFragmentScopeName
override val layoutId = R.layout.fragment_sample

fun updateText(text: String) {
fragmentTextContainer.text = text
}
}
Original file line number Diff line number Diff line change
@@ -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) }
}
9 changes: 9 additions & 0 deletions sample-kotlin-koin/src/main/res/layout/activity_sample.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@
android:layout_height="0dp"
android:layout_weight="1"/>

<Button
android:id="@+id/showDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:text="@string/show_dialog"
android:textColor="@color/white"
android:layout_marginBottom="10dp"/>

<Button
android:id="@+id/showCustomView"
android:layout_width="match_parent"
Expand Down
2 changes: 2 additions & 0 deletions sample-kotlin-koin/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@
<string name="temperature">Temperature: %d °C</string>
<string name="custom_view">custom view</string>
<string name="show_custom_view">Show Custom View</string>
<string name="show_dialog">Show dialog</string>
<string name="im_custom_dialog">I\'m custom dialog</string>
</resources>