Skip to content

Commit dd8f14e

Browse files
committed
refactor packaging and naming
1 parent c13652a commit dd8f14e

28 files changed

+292
-269
lines changed

app/src/main/java/com/willowtreeapps/namegame/NameGameApp.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,24 @@ package com.willowtreeapps.namegame
22

33
import android.app.Application
44
import com.willowtreeapps.common.GameEngine
5-
import com.willowtreeapps.common.PresenterFactory
65
import kotlinx.coroutines.Dispatchers
76

87
class NameGameApp : Application() {
98

109
lateinit var gameEngine: GameEngine
11-
lateinit var navigator: AndroidNavigator
12-
lateinit var presenterFactory: PresenterFactory
1310

1411
override fun onCreate() {
1512
super.onCreate()
1613
instance = this
17-
navigator = AndroidNavigator()
18-
gameEngine = GameEngine(navigator, this)
19-
presenterFactory = PresenterFactory(gameEngine, Dispatchers.IO)
14+
val navigator = AndroidNavigator()
15+
gameEngine = GameEngine(navigator, this, Dispatchers.IO)
2016

2117
registerActivityLifecycleCallbacks(navigator)
2218
}
2319

2420
companion object {
2521
lateinit var instance: NameGameApp
22+
23+
fun gameEngine() = instance.gameEngine
2624
}
2725
}

app/src/main/java/com/willowtreeapps/namegame/store/GameResultsFragment.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
77
import androidx.fragment.app.Fragment
8-
import com.willowtreeapps.common.GameResultsPresenter
98
import com.willowtreeapps.common.GameResultsViewState
10-
import com.willowtreeapps.common.view.GameResultsScreen
9+
import com.willowtreeapps.common.ui.GameResultsPresenter
10+
import com.willowtreeapps.common.ui.GameResultsView
1111
import com.willowtreeapps.namegame.MainActivity
1212
import com.willowtreeapps.namegame.NameGameApp
1313
import com.willowtreeapps.namegame.R
@@ -16,16 +16,15 @@ import kotlinx.coroutines.CoroutineScope
1616
import kotlinx.coroutines.Dispatchers
1717
import kotlin.coroutines.CoroutineContext
1818

19-
class GameResultsFragment : Fragment(), CoroutineScope, GameResultsScreen, MainActivity.IOnBackPressed {
19+
class GameResultsFragment : Fragment(), CoroutineScope, GameResultsView, MainActivity.IOnBackPressed {
2020

2121
override val coroutineContext: CoroutineContext
2222
get() = Dispatchers.Main
2323

24-
var presenter: GameResultsPresenter? = null
24+
private var presenter: GameResultsPresenter? = null
2525

2626
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
27-
val view = inflater.inflate(R.layout.fragment_game_results, container, false)
28-
return view
27+
return inflater.inflate(R.layout.fragment_game_results, container, false)
2928
}
3029

3130
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -34,19 +33,19 @@ class GameResultsFragment : Fragment(), CoroutineScope, GameResultsScreen, MainA
3433

3534
private fun initViews() {
3635
btn_start_over.setOnClickListener {
37-
NameGameApp.instance.presenterFactory.detachView(presenter!!)
36+
NameGameApp.gameEngine().detachView(presenter!!)
3837
presenter?.startOverTapped()
3938
}
4039
}
4140

4241
override fun onResume() {
4342
super.onResume()
44-
presenter = NameGameApp.instance.presenterFactory.attachView(this) as GameResultsPresenter
43+
presenter = NameGameApp.gameEngine().attachView(this) as GameResultsPresenter
4544
}
4645

4746
override fun onPause() {
4847
super.onPause()
49-
NameGameApp.instance.presenterFactory.detachView(presenter!!)
48+
NameGameApp.gameEngine().detachView(presenter!!)
5049
}
5150

5251
override fun showResults(viewState: GameResultsViewState) {

app/src/main/java/com/willowtreeapps/namegame/store/QuestionFragment.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import android.view.ViewGroup
1212
import android.view.animation.BounceInterpolator
1313
import androidx.fragment.app.Fragment
1414
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
15-
import com.willowtreeapps.common.QuestionPresenter
1615
import com.willowtreeapps.common.QuestionViewState
17-
import com.willowtreeapps.common.view.QuestionScreen
16+
import com.willowtreeapps.common.ui.QuestionView
1817
import kotlinx.android.synthetic.main.fragment_question.*
1918
import kotlinx.coroutines.CoroutineScope
2019
import kotlinx.coroutines.Dispatchers
@@ -24,34 +23,35 @@ import java.lang.IllegalStateException
2423
import kotlin.coroutines.CoroutineContext
2524
import android.widget.Button
2625
import androidx.annotation.ColorRes
26+
import com.willowtreeapps.common.ui.QuestionPresenter
2727
import com.willowtreeapps.namegame.*
2828

2929

30-
class QuestionFragment : Fragment(), CoroutineScope, QuestionScreen, MainActivity.IOnBackPressed {
30+
class QuestionFragment : Fragment(), CoroutineScope, QuestionView, MainActivity.IOnBackPressed {
3131

3232
private var presenter: QuestionPresenter? = null
3333

3434
override val coroutineContext: CoroutineContext
3535
get() = Dispatchers.Main
3636

37-
var restoreX: Float? = null
38-
var restoreY: Float? = null
37+
private var restoreX: Float? = null
38+
private var restoreY: Float? = null
3939
@ColorRes
4040
var lastCorrectBtn: Button? = null
41-
var lastSelectedBtn: Button? = null
41+
private var lastSelectedBtn: Button? = null
4242

4343
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
4444
return inflater.inflate(R.layout.fragment_question, container, false)
4545
}
4646

4747
override fun onResume() {
4848
super.onResume()
49-
presenter = NameGameApp.instance.presenterFactory.attachView(this) as QuestionPresenter
49+
presenter = NameGameApp.gameEngine().attachView(this) as QuestionPresenter
5050
}
5151

5252
override fun onPause() {
5353
super.onPause()
54-
NameGameApp.instance.presenterFactory.detachView(presenter!!)
54+
NameGameApp.gameEngine().detachView(presenter!!)
5555
}
5656

5757
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -69,7 +69,7 @@ class QuestionFragment : Fragment(), CoroutineScope, QuestionScreen, MainActivit
6969

7070

7171
override fun onBackPressed(): Boolean {
72-
NameGameApp.instance.presenterFactory.detachView(presenter!!)
72+
NameGameApp.gameEngine().detachView(presenter!!)
7373
presenter?.onBackPressed()
7474
return false
7575
}

app/src/main/java/com/willowtreeapps/namegame/store/StartFragment.kt

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
77
import androidx.fragment.app.Fragment
8-
import com.willowtreeapps.common.StartPresenter
9-
import com.willowtreeapps.common.view.StartScreen
8+
import com.willowtreeapps.common.ui.StartPresenter
9+
import com.willowtreeapps.common.ui.StartView
1010
import com.willowtreeapps.namegame.*
1111
import kotlinx.android.synthetic.main.fragment_start.*
1212
import kotlinx.coroutines.CoroutineScope
1313
import kotlinx.coroutines.Dispatchers
1414
import kotlin.coroutines.CoroutineContext
1515

16-
class StartFragment : Fragment(), CoroutineScope, StartScreen {
16+
class StartFragment : Fragment(), CoroutineScope, StartView {
1717

1818
override val coroutineContext: CoroutineContext
1919
get() = Dispatchers.Main
@@ -34,12 +34,12 @@ class StartFragment : Fragment(), CoroutineScope, StartScreen {
3434

3535
override fun onResume() {
3636
super.onResume()
37-
presenter = NameGameApp.instance.presenterFactory.attachView(this) as StartPresenter
37+
presenter = NameGameApp.gameEngine().attachView(this) as StartPresenter
3838
}
3939

4040
override fun onPause() {
4141
super.onPause()
42-
NameGameApp.instance.presenterFactory.detachView(presenter!!)
42+
NameGameApp.gameEngine().detachView(presenter!!)
4343
}
4444

4545
override fun hideLoading() {
@@ -53,14 +53,4 @@ class StartFragment : Fragment(), CoroutineScope, StartScreen {
5353
loading_spinner.visibility = View.VISIBLE
5454
}
5555
}
56-
57-
// override fun onStart() {
58-
// super.onStart()
59-
// presenter = NameGameApp.instance.presenterFactory.attachView(this) as StartPresenter
60-
// }
61-
//
62-
// override fun onStop() {
63-
// super.onStop()
64-
// NameGameApp.instance.presenterFactory.detachView(presenter!!)
65-
// }
6656
}

common/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ kotlin {
3939

4040
// Change to `presets.iosArm64` to deploy the app to iPhone
4141
// Change to `presets.iosX64` to deploy the app to iPhone
42-
fromPreset(presets.iosX64, 'ios') {
43-
// fromPreset(presets.iosArm64, 'ios') {
42+
// fromPreset(presets.iosX64, 'ios') {
43+
fromPreset(presets.iosArm64, 'ios') {
4444
compilations.main.outputKinds('FRAMEWORK')
4545
}
4646
}

common/src/commonMain/kotlin/com/willowtreeapps/common/Actions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ sealed class Actions : Action {
1818
class GameCompleteAction
1919

2020
class StartOverAction
21-
class ResetGameStateAction()
21+
class ResetGameStateAction
2222

2323
}

common/src/commonMain/kotlin/com/willowtreeapps/common/AppState.kt

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package com.willowtreeapps.common
22

3-
import com.beyondeye.reduks.SimpleStore
4-
import com.beyondeye.reduks.middlewares.applyMiddleware
5-
import com.beyondeye.reduks.middlewares.thunkMiddleware
6-
import com.willowtreeapps.common.middleware.NavigationMiddleware
7-
import com.willowtreeapps.common.middleware.Navigator
8-
import com.willowtreeapps.common.middleware.ViewEffectsMiddleware
93
import com.willowtreeapps.common.repo.Profile
10-
import com.willowtreeapps.common.util.VibrateUtil
114

125
data class AppState(val isLoadingProfiles: Boolean = false,
136
val profiles: List<Profile> = listOf(),
@@ -32,7 +25,7 @@ data class AppState(val isLoadingProfiles: Boolean = false,
3225

3326
fun getProfile(id: ProfileId?) = profiles.find { it.id == id?.id }
3427

35-
public fun currentQuestionProfile() = getProfile(currentQuestion?.profileId)!!
28+
fun currentQuestionProfile() = getProfile(currentQuestion?.profileId)!!
3629

3730
fun isGameComplete(): Boolean = currentQuestionIndex >= questions.size || (currentQuestionIndex == questions.size - 1 && questions[currentQuestionIndex].status != Question.Status.UNANSWERED)
3831

@@ -53,16 +46,3 @@ data class Question(val profileId: ProfileId,
5346
}
5447
}
5548

56-
class GameEngine(navigator: Navigator, application: Any = Any()) {
57-
private val navigationMiddleware = NavigationMiddleware(navigator)
58-
private val viewEffectsMiddleware = ViewEffectsMiddleware()
59-
val vibrateUtil = VibrateUtil(application)
60-
61-
val appStore by lazy {
62-
SimpleStore(AppState.INITIAL_STATE, reducer)
63-
.applyMiddleware(::thunkMiddleware,
64-
viewEffectsMiddleware::dispatch,
65-
navigationMiddleware::dispatch)
66-
}
67-
}
68-
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.willowtreeapps.common
2+
3+
import com.beyondeye.reduks.SimpleStore
4+
import com.beyondeye.reduks.middlewares.applyMiddleware
5+
import com.beyondeye.reduks.middlewares.thunkMiddleware
6+
import com.willowtreeapps.common.middleware.NavigationMiddleware
7+
import com.willowtreeapps.common.middleware.Navigator
8+
import com.willowtreeapps.common.middleware.ViewEffectsMiddleware
9+
import com.willowtreeapps.common.util.VibrateUtil
10+
import kotlin.coroutines.CoroutineContext
11+
12+
class GameEngine(navigator: Navigator, application: Any = Any(), networkContext: CoroutineContext) {
13+
private val navigationMiddleware = NavigationMiddleware(navigator)
14+
private val viewEffectsMiddleware = ViewEffectsMiddleware()
15+
private val presenterFactory by lazy { PresenterFactory(this, networkContext) }
16+
val vibrateUtil = VibrateUtil(application)
17+
18+
val appStore by lazy {
19+
SimpleStore(AppState.INITIAL_STATE, reducer)
20+
.applyMiddleware(::thunkMiddleware,
21+
viewEffectsMiddleware::dispatch,
22+
navigationMiddleware::dispatch)
23+
}
24+
25+
fun attachView(view: View): Presenter = presenterFactory.attachView(view)
26+
27+
fun detachView(presenter: Presenter) = presenterFactory.detachView(presenter)
28+
29+
}

0 commit comments

Comments
 (0)