working livedata on craft
continuous-integration/drone/push Build is passing Details

livedata
Lucas Delanier 2 years ago
parent 043dd9ca4f
commit 245ff1bffd

@ -17,6 +17,7 @@ import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -63,7 +64,10 @@ class BossFragment() : Fragment() {
setUpRecyclerView(view) setUpRecyclerView(view)
// Set up accelerometer listener // Set up accelerometer listener
setUpAccelerometerListener(view, viewModel.currentPlayer) viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
setUpAccelerometerListener(view, it)
})
// Set up activity orientation // Set up activity orientation
setUpActivityOrientation() setUpActivityOrientation()

@ -17,6 +17,7 @@ import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@ -53,7 +54,12 @@ class CollectFragment() : Fragment() {
initializeViews(view) initializeViews(view)
// Set up accelerometer listener // Set up accelerometer listener
setUpAccelerometerListener(view,viewModel.currentPlayer)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
setUpAccelerometerListener(view, it)
})
// Set up activity orientation // Set up activity orientation
setUpActivityOrientation() setUpActivityOrientation()

@ -9,6 +9,7 @@ import android.widget.Button
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -29,7 +30,7 @@ class CraftFragment : Fragment() {
private lateinit var buttonForgeMax: Button private lateinit var buttonForgeMax: Button
private lateinit var numberCraftable: TextView private lateinit var numberCraftable: TextView
private lateinit var craftValue : TextView private lateinit var craftValue : TextView
val viewModel : MainViewModel by activityViewModels<MainViewModel>() private val viewModel : MainViewModel by activityViewModels()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -45,8 +46,12 @@ class CraftFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_craft, container, false) val view = inflater.inflate(R.layout.fragment_craft, container, false)
recipe = arguments?.getParcelable("recipe")!! recipe = arguments?.getParcelable("recipe")!!
initializeViews(view, viewModel.currentPlayer)
setUpRecyclerView(view,viewModel.currentPlayer) viewModel.currentPlayer.observe(this.viewLifecycleOwner, Observer {player ->
initializeViews(view, player)
setUpRecyclerView(view, player)
})
return view return view
} }
@ -85,14 +90,10 @@ class CraftFragment : Fragment() {
craftValue.text = recipe.item.stack.toString() craftValue.text = recipe.item.stack.toString()
buttonForge.setOnClickListener{ buttonForge.setOnClickListener{
currentPlayer.craft(recipe) viewModel.craft(recipe)
initializeViews(view, currentPlayer)
setUpRecyclerView(view, currentPlayer)
} }
buttonForgeMax.setOnClickListener{ buttonForgeMax.setOnClickListener{
currentPlayer.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer)) currentPlayer.craft(recipe, RecipeManager.HowManyCraftable(recipe, currentPlayer))
initializeViews(view, currentPlayer)
setUpRecyclerView(view, currentPlayer)
} }

@ -12,6 +12,7 @@ import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.example.shakecraft.model.Player import com.example.shakecraft.model.Player
@ -46,7 +47,11 @@ class HomeFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_home,container,false) val view = inflater.inflate(R.layout.fragment_home,container,false)
// Initialize views // Initialize views
initializeViews(view, viewModel.currentPlayer, isRaining)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
initializeViews(view, it, isRaining)
})
return view return view
} }

@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.model.Tool import com.example.shakecraft.model.Tool
@ -23,15 +24,18 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
} }
override fun onItemLongClick(position: Int) { override fun onItemLongClick(position: Int) {
if (viewModel.currentPlayer.items[position] is Tool) { viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
val text = if (viewModel.currentPlayer.equipeItem(viewModel.currentPlayer.items[position]) ) " was well equipped" else " has been well unequipped" if (it.items[position] is Tool) {
val text = if (it.equipeItem(it.items[position]) ) " was well equipped" else " has been well unequipped"
Toast.makeText( Toast.makeText(
context, context,
viewModel.currentPlayer.items[position].type.name + text, it.items[position].type.name + text,
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
setUpRecyclerView(view?.parent as ViewGroup, this) setUpRecyclerView(view?.parent as ViewGroup, this)
} }
})
} }
override fun onCreateView( override fun onCreateView(
@ -46,11 +50,18 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
return view return view
} }
private fun setUpRecyclerView(view: View,listener: AdapterInventory.OnItemLongClickListener ) { private fun setUpRecyclerView(view: View,listener: AdapterInventory.OnItemLongClickListener ) {
recyclerView = view.findViewById(R.id.recyclerviewInventory) recyclerView = view.findViewById(R.id.recyclerviewInventory)
viewModel.currentPlayer.observe(viewLifecycleOwner, Observer {
with(recyclerView) { with(recyclerView) {
layoutManager = LinearLayoutManager(view.context) layoutManager = LinearLayoutManager(view.context)
adapter = AdapterInventory(viewModel.currentPlayer.items, listener , viewModel.currentPlayer) adapter = AdapterInventory(
it.items,
listener,
it
)
} }
})
} }

@ -4,21 +4,18 @@ import android.os.Build
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.activity.viewModels
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.WindowInsetsControllerCompat
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupWithNavController import androidx.navigation.ui.setupWithNavController
import com.example.shakecraft.services.OpenWeatherMapService import com.example.shakecraft.services.OpenWeatherMapService
import com.example.shakecraft.viewmodel.MainViewModel import com.example.shakecraft.viewmodel.MainViewModel
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
@ -26,8 +23,7 @@ import retrofit2.converter.gson.GsonConverterFactory
class MainActivity: AppCompatActivity() { class MainActivity: AppCompatActivity() {
var isRaining = false var isRaining = false
private lateinit var viewModel: MainViewModel private val model: MainViewModel by viewModels()
@RequiresApi(Build.VERSION_CODES.R) @RequiresApi(Build.VERSION_CODES.R)
private fun hideSystemUI() { private fun hideSystemUI() {
@ -48,8 +44,6 @@ class MainActivity: AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
hideSystemUI() hideSystemUI()
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
val apiKey = "85a2724ad38b3994c2b7ebe1d239bbff" val apiKey = "85a2724ad38b3994c2b7ebe1d239bbff"
val cityName = "Clermont-Ferrand" val cityName = "Clermont-Ferrand"
@ -60,10 +54,8 @@ class MainActivity: AppCompatActivity() {
val openWeatherMapService = retrofit.create(OpenWeatherMapService::class.java) val openWeatherMapService = retrofit.create(OpenWeatherMapService::class.java)
GlobalScope.launch(Dispatchers.Main) { CoroutineScope(Dispatchers.IO).launch {
val weatherResponse = withContext(Dispatchers.IO) { val weatherResponse = openWeatherMapService.getCurrentWeather(cityName, apiKey)
openWeatherMapService.getCurrentWeather(cityName, apiKey)
}
isRaining = isRaining =
weatherResponse.weather.any { it.main.contains("rain", ignoreCase = true) } weatherResponse.weather.any { it.main.contains("rain", ignoreCase = true) }

@ -1,13 +1,21 @@
package com.example.shakecraft.viewmodel package com.example.shakecraft.viewmodel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.example.shakecraft.data.Stub import com.example.shakecraft.data.Stub
import com.example.shakecraft.model.Boss import com.example.shakecraft.model.Boss
import com.example.shakecraft.model.Player import com.example.shakecraft.model.Recipe
class MainViewModel : ViewModel() { class MainViewModel : ViewModel() {
var currentPlayer : Player = Stub().load() var currentPlayer = MutableLiveData(Stub().load())
lateinit var currentBoss : Boss lateinit var currentBoss : Boss
val isBossInitialized get() = this::currentBoss.isInitialized val isBossInitialized get() = this::currentBoss.isInitialized
fun craft(recipe : Recipe){
currentPlayer.value?.craft(recipe)
currentPlayer.value = currentPlayer.value
}
} }
Loading…
Cancel
Save