viewModel to save state
continuous-integration/drone/push Build is passing Details

viewmodel
Lucas Delanier 2 years ago
parent bf752264ef
commit 35fd67cbcf

@ -49,6 +49,8 @@ dependencies {
implementation 'com.google.ar.sceneform:filament-android:1.17.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation 'androidx.fragment:fragment-ktx:1.5.6'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

@ -16,6 +16,7 @@ import android.view.animation.ScaleAnimation
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -24,6 +25,7 @@ import com.example.shakecraft.model.Generator
import com.example.shakecraft.model.Item
import com.example.shakecraft.model.Player
import com.example.shakecraft.view.adapter.AdapterBossLoot
import com.example.shakecraft.viewmodel.MainViewModel
import kotlin.math.pow
import kotlin.math.sqrt
@ -38,6 +40,7 @@ class BossFragment() : Fragment() {
private lateinit var buttonCollect: TextView
private lateinit var recyclerView: RecyclerView
private lateinit var boss: Boss
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -47,7 +50,6 @@ class BossFragment() : Fragment() {
savedInstanceState: Bundle?
): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_boss, container, false)
// Initialize views
@ -61,7 +63,7 @@ class BossFragment() : Fragment() {
setUpRecyclerView(view)
// Set up accelerometer listener
setUpAccelerometerListener(view, currentPlayer)
setUpAccelerometerListener(view, viewModel.currentPlayer)
// Set up activity orientation
setUpActivityOrientation()

@ -16,12 +16,14 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.example.shakecraft.model.Generator
import com.example.shakecraft.model.Item
import com.example.shakecraft.model.Player
import com.example.shakecraft.viewmodel.MainViewModel
import kotlin.math.pow
@ -34,6 +36,7 @@ class CollectFragment() : Fragment() {
private lateinit var accelerometerEventListener: SensorEventListener
private lateinit var progressBar: ProgressBar
private lateinit var buttonBack: TextView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -44,14 +47,13 @@ class CollectFragment() : Fragment() {
savedInstanceState: Bundle?
): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_collect, container, false)
// Initialize views
initializeViews(view)
// Set up accelerometer listener
setUpAccelerometerListener(view,currentPlayer)
setUpAccelerometerListener(view,viewModel.currentPlayer)
// Set up activity orientation
setUpActivityOrientation()

@ -8,6 +8,7 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -15,7 +16,7 @@ import com.example.shakecraft.model.Player
import com.example.shakecraft.model.Recipe
import com.example.shakecraft.model.RecipeManager
import com.example.shakecraft.view.adapter.AdapterMaterials
import com.example.shakecraft.viewmodel.MainViewModel
class CraftFragment : Fragment() {
@ -26,6 +27,7 @@ class CraftFragment : Fragment() {
private lateinit var name: TextView
private lateinit var buttonForge: Button
private lateinit var numberCraftable: TextView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
@ -38,12 +40,11 @@ class CraftFragment : Fragment() {
): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_craft, container, false)
recipe = arguments?.getParcelable("recipe")!!
initializeViews(view, currentPlayer)
setUpRecyclerView(view,currentPlayer)
initializeViews(view, viewModel.currentPlayer)
setUpRecyclerView(view,viewModel.currentPlayer)
return view
}

@ -15,6 +15,7 @@ import com.example.shakecraft.model.RecipeManager
import com.example.shakecraft.view.adapter.AdapterRecipe
class ForgeFragment : Fragment(), AdapterRecipe.OnItemClickListener {
private lateinit var buttonBack: TextView
private lateinit var recyclerViewObjects: RecyclerView

@ -11,9 +11,11 @@ import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.activityViewModels
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
import com.example.shakecraft.model.Player
import com.example.shakecraft.viewmodel.MainViewModel
class HomeFragment : Fragment() {
@ -29,6 +31,7 @@ class HomeFragment : Fragment() {
private lateinit var playermage : ImageView
private lateinit var equipeditem: ImageView
private lateinit var eventFishing: ImageView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -39,12 +42,11 @@ class HomeFragment : Fragment() {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
val isRaining = (activity as MainActivity).isRaining
val view = inflater.inflate(R.layout.fragment_home,container,false)
// Initialize views
initializeViews(view, currentPlayer, isRaining)
initializeViews(view, viewModel.currentPlayer, isRaining)
return view
}

@ -5,34 +5,36 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.model.Player
import com.example.shakecraft.model.Tool
import com.example.shakecraft.view.adapter.AdapterInventory
import com.example.shakecraft.viewmodel.MainViewModel
class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListener {
private lateinit var currentPlayer: Player
private lateinit var recyclerView: RecyclerView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onItemLongClick(position: Int) {
if(currentPlayer.items[position] is Tool) {
if (currentPlayer.equipeItem(currentPlayer.items[position]) == true)
if(viewModel.currentPlayer.items[position] is Tool) {
if (viewModel.currentPlayer.equipeItem(viewModel.currentPlayer.items[position]) == true)
Toast.makeText(
context,
currentPlayer.items[position].type.name + " was well equipped",
viewModel.currentPlayer.items[position].type.name + " was well equipped",
Toast.LENGTH_SHORT
).show()
else
Toast.makeText(
context,
currentPlayer.items[position].type.name + " has been well unequipped",
viewModel.currentPlayer.items[position].type.name + " has been well unequipped",
Toast.LENGTH_SHORT
).show()
setUpRecyclerView(view?.parent as ViewGroup, this)
@ -43,7 +45,6 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_inventory, container, false)
// Initialize views
@ -55,9 +56,10 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
recyclerView = view.findViewById(R.id.recyclerviewInventory)
with(recyclerView) {
layoutManager = LinearLayoutManager(view.context)
adapter = AdapterInventory(currentPlayer.items, listener , currentPlayer)
adapter = AdapterInventory(viewModel.currentPlayer.items, listener , viewModel.currentPlayer)
}
}
}

@ -8,11 +8,12 @@ import androidx.annotation.RequiresApi
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupWithNavController
import com.example.shakecraft.data.Stub
import com.example.shakecraft.services.OpenWeatherMapService
import com.example.shakecraft.viewmodel.MainViewModel
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@ -24,8 +25,8 @@ import retrofit2.converter.gson.GsonConverterFactory
class MainActivity: AppCompatActivity() {
var currentPlayer = Stub().load()
var isRaining = false
private lateinit var viewModel: MainViewModel
@RequiresApi(Build.VERSION_CODES.R)
@ -47,6 +48,7 @@ class MainActivity: AppCompatActivity() {
super.onCreate(savedInstanceState)
hideSystemUI()
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
val apiKey = "85a2724ad38b3994c2b7ebe1d239bbff"
val cityName = "Clermont-Ferrand"
@ -102,4 +104,5 @@ class MainActivity: AppCompatActivity() {
}

@ -0,0 +1,10 @@
package com.example.shakecraft.viewmodel
import androidx.lifecycle.ViewModel
import com.example.shakecraft.data.Stub
import com.example.shakecraft.model.Player
class MainViewModel : ViewModel() {
var currentPlayer : Player = Stub().load()
}
Loading…
Cancel
Save