Skip to content

Commit

Permalink
Merge pull request #99 from lucasnlm/fix-center-board
Browse files Browse the repository at this point in the history
Add CommonLevelFragment and fix vertical center
  • Loading branch information
lucasnlm authored Jun 20, 2020
2 parents 8aa234c + fd702f0 commit 2d6c4fc
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,59 +2,24 @@ package dev.lucasnlm.antimine.level.view

import android.os.Bundle
import android.text.format.DateUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerFragment
import dev.lucasnlm.antimine.DeepLink
import dev.lucasnlm.antimine.common.R
import dev.lucasnlm.antimine.common.level.models.Difficulty
import dev.lucasnlm.antimine.common.level.models.Event
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
import dev.lucasnlm.antimine.common.level.view.AreaAdapter
import dev.lucasnlm.antimine.common.level.view.CommonLevelFragment
import dev.lucasnlm.antimine.common.level.view.SpaceItemDecoration
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModelFactory
import dev.lucasnlm.antimine.common.level.widget.FixedGridLayoutManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject

open class LevelFragment : DaggerFragment() {
@Inject
lateinit var viewModelFactory: GameViewModelFactory

@Inject
lateinit var dimensionRepository: IDimensionRepository

private lateinit var viewModel: GameViewModel
private lateinit var recyclerGrid: RecyclerView
private lateinit var areaAdapter: AreaAdapter

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? =
inflater.inflate(R.layout.fragment_level, container, false)

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

activity?.let {
viewModel = ViewModelProviders.of(it, viewModelFactory).get(GameViewModel::class.java)
areaAdapter = AreaAdapter(it.applicationContext, viewModel)
}
}
open class LevelFragment : CommonLevelFragment() {
override val levelFragmentResId: Int = R.layout.fragment_level

override fun onPause() {
super.onPause()

GlobalScope.launch {
viewModel.saveGame()
}
Expand Down Expand Up @@ -171,23 +136,4 @@ open class LevelFragment : DaggerFragment() {
null
}
}

private fun makeNewLayoutManager(boardWidth: Int) =
FixedGridLayoutManager().apply {
setTotalColumnCount(boardWidth)
}

private fun calcHorizontalPadding(boardWidth: Int): Int {
val width = recyclerGrid.measuredWidth
val recyclerViewWidth = (dimensionRepository.areaSize() * boardWidth)
val separatorsWidth = (dimensionRepository.areaSeparator() * (boardWidth - 1))
return ((width - recyclerViewWidth - separatorsWidth) / 2).coerceAtLeast(0.0f).toInt()
}

private fun calcVerticalPadding(boardHeight: Int): Int {
val height = recyclerGrid.measuredHeight
val recyclerViewHeight = (dimensionRepository.areaSize() * boardHeight)
val separatorsHeight = (dimensionRepository.areaSeparator() * (boardHeight - 1))
return ((height - recyclerViewHeight - separatorsHeight) / 2).coerceAtLeast(0.0f).toInt()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package dev.lucasnlm.antimine.common.level.view

import android.os.Bundle
import android.util.DisplayMetrics
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.RecyclerView
import dagger.android.support.DaggerFragment
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModelFactory
import dev.lucasnlm.antimine.common.level.widget.FixedGridLayoutManager
import javax.inject.Inject

abstract class CommonLevelFragment : DaggerFragment() {
@Inject
lateinit var viewModelFactory: GameViewModelFactory

@Inject
lateinit var dimensionRepository: IDimensionRepository

protected lateinit var viewModel: GameViewModel
protected lateinit var recyclerGrid: RecyclerView
protected lateinit var areaAdapter: AreaAdapter

abstract val levelFragmentResId: Int

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(levelFragmentResId, container, false)

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

activity?.let {
viewModel = ViewModelProviders.of(it, viewModelFactory).get(GameViewModel::class.java)
areaAdapter = AreaAdapter(it.applicationContext, viewModel)
}
}

protected fun makeNewLayoutManager(boardWidth: Int) =
FixedGridLayoutManager().apply {
setTotalColumnCount(boardWidth)
}

protected fun calcHorizontalPadding(boardWidth: Int): Int {
val activity = requireActivity()
val displayMetrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getMetrics(displayMetrics)

val width = displayMetrics.widthPixels
val recyclerViewWidth = (dimensionRepository.areaSize() * boardWidth)
val separatorsWidth = (dimensionRepository.areaSeparator() * (boardWidth - 1))
return ((width - recyclerViewWidth - separatorsWidth) / 2).coerceAtLeast(0.0f).toInt()
}

protected fun calcVerticalPadding(boardHeight: Int): Int {
val activity = requireActivity()
val displayMetrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getMetrics(displayMetrics)

val typedValue = TypedValue()
val actionBarHeight = if (activity.theme.resolveAttribute(android.R.attr.actionBarSize, typedValue, true)) {
TypedValue.complexToDimensionPixelSize(typedValue.data, resources.displayMetrics)
} else {
0
}

val height = displayMetrics.heightPixels - actionBarHeight
val recyclerViewHeight = (dimensionRepository.areaSize() * boardHeight)
val separatorsHeight = (dimensionRepository.areaSeparator() * (boardHeight - 1))

return ((height - recyclerViewHeight - separatorsHeight) / 2).coerceAtLeast(0.0f).toInt()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,54 +2,20 @@ package dev.lucasnlm.antimine.wear

import android.os.Bundle
import android.text.format.DateUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.RecyclerView
import dev.lucasnlm.antimine.common.R
import dagger.android.support.DaggerFragment
import dev.lucasnlm.antimine.common.level.models.AmbientSettings
import dev.lucasnlm.antimine.common.level.models.Event
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
import dev.lucasnlm.antimine.common.level.view.AreaAdapter
import dev.lucasnlm.antimine.common.level.view.CommonLevelFragment
import dev.lucasnlm.antimine.common.level.view.SpaceItemDecoration
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModelFactory
import dev.lucasnlm.antimine.common.level.widget.FixedGridLayoutManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject

class WatchLevelFragment : DaggerFragment() {
@Inject
lateinit var viewModelFactory: GameViewModelFactory

@Inject
lateinit var dimensionRepository: IDimensionRepository

private lateinit var viewModel: GameViewModel
private lateinit var recyclerGrid: RecyclerView
private lateinit var areaAdapter: AreaAdapter

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? =
inflater.inflate(R.layout.fragment_level, container, false)

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

activity?.let {
viewModel = ViewModelProviders.of(it, viewModelFactory).get(GameViewModel::class.java)
areaAdapter = AreaAdapter(it.applicationContext, viewModel)
}
}
class WatchLevelFragment : CommonLevelFragment() {
override val levelFragmentResId: Int = R.layout.fragment_level

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Expand Down Expand Up @@ -119,25 +85,6 @@ class WatchLevelFragment : DaggerFragment() {
}
}

private fun makeNewLayoutManager(boardWidth: Int) =
FixedGridLayoutManager().apply {
setTotalColumnCount(boardWidth)
}

private fun calcHorizontalPadding(boardWidth: Int): Int {
val width = recyclerGrid.measuredWidth
val recyclerViewWidth = (dimensionRepository.areaSize() * boardWidth)
val separatorsWidth = (dimensionRepository.areaSeparator() * (boardWidth - 1))
return ((width - recyclerViewWidth - separatorsWidth) / 2).coerceAtLeast(0.0f).toInt()
}

private fun calcVerticalPadding(boardHeight: Int): Int {
val height = recyclerGrid.measuredHeight
val recyclerViewHeight = (dimensionRepository.areaSize() * boardHeight)
val separatorsHeight = (dimensionRepository.areaSeparator() * (boardHeight - 1))
return ((height - recyclerViewHeight - separatorsHeight) / 2).coerceAtLeast(0.0f).toInt()
}

fun setAmbientMode(ambientSettings: AmbientSettings) {
areaAdapter.apply {
setAmbientMode(ambientSettings.isAmbientMode, ambientSettings.isLowBitAmbient)
Expand Down

0 comments on commit 2d6c4fc

Please sign in to comment.