Skip to content

Commit

Permalink
Merge branch 'feature/50-wtf' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
Entreco committed Jul 22, 2018
2 parents c34cdd5 + e475110 commit c683230
Show file tree
Hide file tree
Showing 48 changed files with 908 additions and 11 deletions.
1 change: 1 addition & 0 deletions android/DartsScorecard/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ dependencies {
implementation "com.google.firebase:firebase-firestore:$firebase"
implementation "android.arch.lifecycle:extensions:$architecture"
implementation "android.arch.persistence.room:runtime:$room"
implementation "com.github.yalantis:jellytoolbar:$jelly"
implementation "com.github.bumptech.glide:glide:$glide"
implementation "de.hdodenhof:circleimageview:$circleImageView"
implementation("com.crashlytics.sdk.android:crashlytics:$crash") {
Expand Down
4 changes: 4 additions & 0 deletions android/DartsScorecard/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@
<activity
android:name=".beta.BetaActivity"
android:parentActivityName=".launch.LaunchActivity" />
<activity
android:name=".wtf.WtfActivity"
android:windowSoftInputMode="stateHidden"
android:parentActivityName=".launch.LaunchActivity" />
<activity
android:name=".setup.Setup01Activity"
android:parentActivityName=".launch.LaunchActivity" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@ import android.preference.PreferenceManager
import android.support.annotation.StringRes
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.MenuItem
import nl.entreco.dartsscorecard.App
import nl.entreco.dartsscorecard.R
import nl.entreco.dartsscorecard.di.viewmodel.ViewModelComponent
import nl.entreco.dartsscorecard.di.viewmodel.ViewModelModule
import nl.entreco.dartsscorecard.wtf.WtfActivity

/**
* Created by Entreco on 14/11/2017.
Expand Down Expand Up @@ -56,6 +58,16 @@ abstract class ViewModelActivity : AppCompatActivity() {
styler.switch()
}

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId) {
R.id.menu_faq -> {
WtfActivity.launch(this)
true
}
else -> super.onOptionsItemSelected(item)
}
}

protected fun initToolbar(toolbar: Toolbar, @StringRes title: Int = R.string.app_name, showHomeEnabled: Boolean = true) {
setSupportActionBar(toolbar)
setTitle(title)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import android.support.design.widget.Snackbar
import android.support.v7.widget.DefaultItemAnimator
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.Toolbar
import android.view.Menu
import android.view.MenuItem
import nl.entreco.dartsscorecard.R
import nl.entreco.dartsscorecard.base.ViewModelActivity
Expand Down Expand Up @@ -64,6 +65,11 @@ class BetaActivity : ViewModelActivity(), DonateCallback, BetaAnimator.Swapper {
viewModel.unsubscribe(this)
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.beta, menu)
return super.onCreateOptionsMenu(menu)
}

override fun lifeCycle(): Lifecycle {
return lifecycle
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ class BetaViewModel @Inject constructor(private val subscribeToFeaturesUsecase:

private val features: MutableLiveData<List<Feature>> = MutableLiveData()


fun refresh() {
subscribeToFeaturesUsecase.subscribe({
features.value = it
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ import javax.inject.Inject
* Created by entreco on 08/02/2018.
*/
class DonateViewModel @Inject constructor(
private val donateCallback: DonateCallback,
private var donateCallback: DonateCallback?,
private val connectToBillingUsecase: ConnectToBillingUsecase,
private val fetchDonationsUsecase: FetchDonationsUsecase,
private val makeDonation: MakeDonationUsecase,
private val consumeDonation: ConsumeDonationUsecase,
private val analytics: Analytics) : BaseViewModel(), LifecycleObserver {

init {
donateCallback.lifeCycle().addObserver(this)
donateCallback?.lifeCycle()?.addObserver(this)
}

internal var productId: String = ""
Expand All @@ -42,7 +42,7 @@ class DonateViewModel @Inject constructor(
}

private fun onStartMakeDonation(): (MakeDonationResponse) -> Unit = { response ->
donateCallback.makeDonation(response)
donateCallback?.makeDonation(response)
}

fun onMakeDonationSuccess(data: Intent?) {
Expand Down Expand Up @@ -79,7 +79,7 @@ class DonateViewModel @Inject constructor(
private fun donationDone(response: ConsumeDonationResponse) {
donationWithId(response)?.let { donation ->
analytics.trackPurchase(donation, response.orderId)
donateCallback.onDonationMade(donation)
donateCallback?.onDonationMade(donation)
}
}

Expand Down Expand Up @@ -126,6 +126,11 @@ class DonateViewModel @Inject constructor(

@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun destroy() {
donateCallback.lifeCycle().removeObserver(this)
donateCallback?.lifeCycle()?.removeObserver(this)
}

override fun onCleared() {
donateCallback = null
super.onCleared()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,27 @@ import nl.entreco.dartsscorecard.di.setup.EditPlayerModule
import nl.entreco.dartsscorecard.di.setup.Setup01Component
import nl.entreco.dartsscorecard.di.setup.Setup01Module
import nl.entreco.dartsscorecard.di.viewmodel.ad.AdModule
import nl.entreco.dartsscorecard.di.viewmodel.api.FaqApiModule
import nl.entreco.dartsscorecard.di.viewmodel.api.FeatureApiModule
import nl.entreco.dartsscorecard.di.viewmodel.db.*
import nl.entreco.dartsscorecard.di.viewmodel.threading.ThreadingModule
import nl.entreco.dartsscorecard.di.wtf.WtfComponent
import nl.entreco.dartsscorecard.di.wtf.WtfModule

/**
* Created by Entreco on 14/11/2017.
*/
@ActivityScope
@Subcomponent(modules = [(ViewModelModule::class), (ThreadingModule::class), (AdModule::class),
(GameDbModule::class), (PlayerDbModule::class), (TurnDbModule::class),
(MetaDbModule::class), (StatDbModule::class), (FeatureApiModule::class)])
(MetaDbModule::class), (StatDbModule::class), (FeatureApiModule::class), (FaqApiModule::class)])
interface ViewModelComponent {

// Where can this be used
fun plus(module: LaunchModule): LaunchComponent

fun plus(module: BetaModule): BetaComponent
fun plus(module: WtfModule): WtfComponent
fun plus(module: Setup01Module): Setup01Component
fun plus(module: EditPlayerModule): EditPlayerComponent
fun plus(module: Play01Module): Play01Component
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package nl.entreco.dartsscorecard.di.viewmodel.api

import com.google.firebase.firestore.FirebaseFirestore
import dagger.Module
import dagger.Provides
import nl.entreco.data.wtf.RemoteWtfRepository
import nl.entreco.domain.common.log.Logger
import nl.entreco.domain.repository.WtfRepository

@Module
class FaqApiModule {

@Provides
fun provideRemoteFaqRepository(db: FirebaseFirestore, logger: Logger): WtfRepository {
return RemoteWtfRepository(db, logger)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package nl.entreco.dartsscorecard.di.wtf

import dagger.Subcomponent
import nl.entreco.dartsscorecard.wtf.WtfAdapter
import nl.entreco.dartsscorecard.wtf.WtfViewModel

@WtfScope
@Subcomponent(modules = [(WtfModule::class)])
interface WtfComponent {
fun viewModel(): WtfViewModel
fun adapter(): WtfAdapter
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package nl.entreco.dartsscorecard.di.wtf

import dagger.Module

@Module
class WtfModule
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package nl.entreco.dartsscorecard.di.wtf

import javax.inject.Scope

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class WtfScope
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import nl.entreco.dartsscorecard.beta.BetaActivity
import nl.entreco.dartsscorecard.play.Play01Activity
import nl.entreco.dartsscorecard.profile.select.SelectProfileActivity
import nl.entreco.dartsscorecard.setup.Setup01Activity
import nl.entreco.dartsscorecard.wtf.WtfActivity
import nl.entreco.domain.launch.FetchLatestGameResponse
import nl.entreco.domain.launch.RetrieveLatestGameUsecase
import nl.entreco.domain.setup.game.CreateGameResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import android.support.v7.widget.DefaultItemAnimator
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.Toolbar
import android.view.Menu
import nl.entreco.dartsscorecard.R
import nl.entreco.dartsscorecard.base.ViewModelActivity
import nl.entreco.dartsscorecard.databinding.ActivitySelectProfileBinding
Expand Down Expand Up @@ -63,6 +64,11 @@ class SelectProfileActivity : ViewModelActivity() {
swipeToDeleteHelper.attachToRecyclerView(recyclerView)
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.select, menu)
return super.onCreateOptionsMenu(menu)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CODE_VIEW && resultCode == Activity.RESULT_OK) {
viewModel.reload(adapter)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package nl.entreco.dartsscorecard.wtf

import android.content.Context
import android.content.Intent
import android.databinding.DataBindingUtil
import android.os.Bundle
import android.support.v7.widget.DefaultItemAnimator
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.Toolbar
import android.view.LayoutInflater
import android.view.MenuItem
import com.yalantis.jellytoolbar.listener.JellyListener
import nl.entreco.dartsscorecard.R
import nl.entreco.dartsscorecard.base.ViewModelActivity
import nl.entreco.dartsscorecard.databinding.ActivityWtfBinding
import nl.entreco.dartsscorecard.databinding.SearchbarBinding
import nl.entreco.dartsscorecard.di.wtf.WtfComponent
import nl.entreco.dartsscorecard.di.wtf.WtfModule
import android.support.v4.content.ContextCompat
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager


class WtfActivity : ViewModelActivity() {

private lateinit var binding: ActivityWtfBinding
private lateinit var searchBinding: SearchbarBinding
private val component: WtfComponent by componentProvider { it.plus(WtfModule()) }
private val viewModel: WtfViewModel by viewModelProvider { component.viewModel() }
private val adapter: WtfAdapter by lazy { component.adapter() }

private val jellyListener by lazy {
object : JellyListener() {
override fun onCancelIconClicked() {
val searchField = searchBinding.searchField
if (searchField.text.isEmpty()) {
binding.includeToolbar.toolbar.collapse()
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(searchField.windowToken, 0)
} else {
searchField.text.clear()
}
}
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding = DataBindingUtil.setContentView(this, R.layout.activity_wtf)
binding.viewModel = viewModel

initJellyBar()
initToolbar(toolbar(binding), R.string.title_wtf)
initRecyclerView(binding)
}

private fun initJellyBar() {
binding.includeToolbar.toolbar.jellyListener = jellyListener
searchBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.searchbar, null, false)
searchBinding.listener = adapter
binding.includeToolbar.toolbar.contentView = searchBinding.root
}

private fun initRecyclerView(binding: ActivityWtfBinding) {
val recyclerView = binding.wtfRecyclerView
recyclerView.setHasFixedSize(true)
recyclerView.setItemViewCacheSize(20)
recyclerView.layoutManager = GridLayoutManager(binding.root.context, 1)
recyclerView.itemAnimator = DefaultItemAnimator()
recyclerView.isDrawingCacheEnabled = true
recyclerView.adapter = adapter
}

private fun toolbar(binding: ActivityWtfBinding): Toolbar {
return binding.includeToolbar.toolbar.toolbar!!
}

override fun onResume() {
super.onResume()
viewModel.subscribe(this, adapter)
}

override fun onPause() {
super.onPause()
viewModel.unsubscribe(this)
}

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId) {
android.R.id.home -> {
onBackPressed()
true
}
else -> super.onOptionsItemSelected(item)
}
}

companion object {

@JvmStatic
fun launch(context: Context) {
val intent = Intent(context, WtfActivity::class.java)
context.startActivity(intent)
}
}
}
Loading

0 comments on commit c683230

Please sign in to comment.