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 'com.google.ar.sceneform:filament-android:1.17.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-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' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 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.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.activityViewModels
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
@ -24,6 +25,7 @@ import com.example.shakecraft.model.Generator
import com.example.shakecraft.model.Item import com.example.shakecraft.model.Item
import com.example.shakecraft.model.Player import com.example.shakecraft.model.Player
import com.example.shakecraft.view.adapter.AdapterBossLoot import com.example.shakecraft.view.adapter.AdapterBossLoot
import com.example.shakecraft.viewmodel.MainViewModel
import kotlin.math.pow import kotlin.math.pow
import kotlin.math.sqrt import kotlin.math.sqrt
@ -38,6 +40,7 @@ class BossFragment() : Fragment() {
private lateinit var buttonCollect: TextView private lateinit var buttonCollect: TextView
private lateinit var recyclerView: RecyclerView private lateinit var recyclerView: RecyclerView
private lateinit var boss: Boss private lateinit var boss: Boss
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -47,7 +50,6 @@ class BossFragment() : Fragment() {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_boss, container, false) val view = inflater.inflate(R.layout.fragment_boss, container, false)
// Initialize views // Initialize views
@ -61,7 +63,7 @@ class BossFragment() : Fragment() {
setUpRecyclerView(view) setUpRecyclerView(view)
// Set up accelerometer listener // Set up accelerometer listener
setUpAccelerometerListener(view, currentPlayer) setUpAccelerometerListener(view, viewModel.currentPlayer)
// Set up activity orientation // Set up activity orientation
setUpActivityOrientation() setUpActivityOrientation()

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

@ -8,6 +8,7 @@ import android.view.ViewGroup
import android.widget.Button 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.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
@ -15,7 +16,7 @@ import com.example.shakecraft.model.Player
import com.example.shakecraft.model.Recipe import com.example.shakecraft.model.Recipe
import com.example.shakecraft.model.RecipeManager import com.example.shakecraft.model.RecipeManager
import com.example.shakecraft.view.adapter.AdapterMaterials import com.example.shakecraft.view.adapter.AdapterMaterials
import com.example.shakecraft.viewmodel.MainViewModel
class CraftFragment : Fragment() { class CraftFragment : Fragment() {
@ -26,6 +27,7 @@ class CraftFragment : Fragment() {
private lateinit var name: TextView private lateinit var name: TextView
private lateinit var buttonForge: Button private lateinit var buttonForge: Button
private lateinit var numberCraftable: TextView private lateinit var numberCraftable: TextView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -38,12 +40,11 @@ class CraftFragment : Fragment() {
): View? { ): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
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, currentPlayer) initializeViews(view, viewModel.currentPlayer)
setUpRecyclerView(view,currentPlayer) setUpRecyclerView(view,viewModel.currentPlayer)
return view return view
} }

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

@ -11,9 +11,11 @@ import android.widget.ImageView
import android.widget.ProgressBar 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.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
import com.example.shakecraft.viewmodel.MainViewModel
class HomeFragment : Fragment() { class HomeFragment : Fragment() {
@ -29,6 +31,7 @@ class HomeFragment : Fragment() {
private lateinit var playermage : ImageView private lateinit var playermage : ImageView
private lateinit var equipeditem: ImageView private lateinit var equipeditem: ImageView
private lateinit var eventFishing: ImageView private lateinit var eventFishing: ImageView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -39,12 +42,11 @@ class HomeFragment : Fragment() {
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
val currentPlayer = (activity as MainActivity).currentPlayer
val isRaining = (activity as MainActivity).isRaining val isRaining = (activity as MainActivity).isRaining
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, currentPlayer, isRaining) initializeViews(view, viewModel.currentPlayer, isRaining)
return view return view
} }

@ -5,34 +5,36 @@ import android.view.LayoutInflater
import android.view.View 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.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.example.shakecraft.model.Player
import com.example.shakecraft.model.Tool import com.example.shakecraft.model.Tool
import com.example.shakecraft.view.adapter.AdapterInventory import com.example.shakecraft.view.adapter.AdapterInventory
import com.example.shakecraft.viewmodel.MainViewModel
class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListener { class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListener {
private lateinit var currentPlayer: Player
private lateinit var recyclerView: RecyclerView private lateinit var recyclerView: RecyclerView
val viewModel : MainViewModel by activityViewModels<MainViewModel>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
} }
override fun onItemLongClick(position: Int) { override fun onItemLongClick(position: Int) {
if(currentPlayer.items[position] is Tool) { if(viewModel.currentPlayer.items[position] is Tool) {
if (currentPlayer.equipeItem(currentPlayer.items[position]) == true) if (viewModel.currentPlayer.equipeItem(viewModel.currentPlayer.items[position]) == true)
Toast.makeText( Toast.makeText(
context, context,
currentPlayer.items[position].type.name + " was well equipped", viewModel.currentPlayer.items[position].type.name + " was well equipped",
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
else else
Toast.makeText( Toast.makeText(
context, context,
currentPlayer.items[position].type.name + " has been well unequipped", viewModel.currentPlayer.items[position].type.name + " has been well unequipped",
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
setUpRecyclerView(view?.parent as ViewGroup, this) setUpRecyclerView(view?.parent as ViewGroup, this)
@ -43,7 +45,6 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
currentPlayer = (activity as MainActivity).currentPlayer
val view = inflater.inflate(R.layout.fragment_inventory, container, false) val view = inflater.inflate(R.layout.fragment_inventory, container, false)
// Initialize views // Initialize views
@ -55,9 +56,10 @@ class InventoryFragment() : Fragment( ), AdapterInventory.OnItemLongClickListene
recyclerView = view.findViewById(R.id.recyclerviewInventory) recyclerView = view.findViewById(R.id.recyclerviewInventory)
with(recyclerView) { with(recyclerView) {
layoutManager = LinearLayoutManager(view.context) 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.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.data.Stub
import com.example.shakecraft.services.OpenWeatherMapService import com.example.shakecraft.services.OpenWeatherMapService
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.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
@ -24,8 +25,8 @@ import retrofit2.converter.gson.GsonConverterFactory
class MainActivity: AppCompatActivity() { class MainActivity: AppCompatActivity() {
var currentPlayer = Stub().load()
var isRaining = false var isRaining = false
private lateinit var viewModel: MainViewModel
@RequiresApi(Build.VERSION_CODES.R) @RequiresApi(Build.VERSION_CODES.R)
@ -47,6 +48,7 @@ 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"
@ -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