Pendelsession information save in profile in progress new fragment "fragment_start_pendulum" finished last step save Data from Pendulum in Profilmaster
@ -1,4 +1,15 @@ | |||||
package com.example.acapendulum20.data | package com.example.acapendulum20.data | ||||
class MeasurementDao { | |||||
import androidx.lifecycle.LiveData | |||||
import androidx.room.* | |||||
import com.example.acapendulum20.model.Measurement | |||||
import com.example.acapendulum20.model.User | |||||
@Dao | |||||
interface MeasurementDao { | |||||
@Insert(onConflict = OnConflictStrategy.IGNORE ) | |||||
fun addMeasurement(measurement: Measurement) | |||||
} | } |
@ -1,4 +1,35 @@ | |||||
package com.example.acapendulum20.data | package com.example.acapendulum20.data | ||||
class MeasurementDatabase { | |||||
import android.content.Context | |||||
import android.icu.util.Measure | |||||
import androidx.room.Database | |||||
import androidx.room.Room | |||||
import androidx.room.RoomDatabase | |||||
import com.example.acapendulum20.model.User | |||||
import com.example.acapendulum20.model.Measurement | |||||
@Database(entities = [Measurement::class], version = 1, exportSchema = false) | |||||
abstract class MeasurementDatabase: RoomDatabase() { | |||||
abstract fun measurementDao(): MeasurementDao | |||||
companion object { | |||||
@Volatile | |||||
private var INSTANCE: MeasurementDatabase? = null | |||||
fun getDatabase(context: Context): MeasurementDatabase{ | |||||
val tempInstance = INSTANCE | |||||
if(tempInstance != null){ | |||||
return tempInstance | |||||
} | |||||
synchronized(this){ | |||||
val instance = Room.databaseBuilder( | |||||
context.applicationContext, | |||||
MeasurementDatabase::class.java, | |||||
"measurement_database" | |||||
).build() | |||||
INSTANCE = instance | |||||
return instance | |||||
} | |||||
} | |||||
} | |||||
} | } |
@ -0,0 +1,71 @@ | |||||
package com.example.acapendulum20.fragments.pendulum | |||||
import android.os.Bundle | |||||
import android.text.Editable | |||||
import android.text.TextUtils | |||||
import android.view.LayoutInflater | |||||
import android.view.View | |||||
import android.view.ViewGroup | |||||
import android.widget.Toast | |||||
import androidx.fragment.app.Fragment | |||||
import androidx.lifecycle.ViewModelProvider | |||||
import androidx.navigation.fragment.findNavController | |||||
import androidx.navigation.fragment.navArgs | |||||
import androidx.room.ForeignKey | |||||
import com.example.acapendulum20.R | |||||
import com.example.acapendulum20.StartPendulum | |||||
import com.example.acapendulum20.fragments.update.UpdateFragmentArgs | |||||
import com.example.acapendulum20.model.Measurement | |||||
import com.example.acapendulum20.model.User | |||||
import com.example.acapendulum20.viewmodel.MeasurementViewmodel | |||||
import com.example.acapendulum20.viewmodel.UserViewmodel | |||||
import kotlinx.android.synthetic.main.fragment_start_pendulum.* | |||||
import kotlinx.android.synthetic.main.fragment_start_pendulum.view.* | |||||
import java.time.LocalDateTime | |||||
import java.util.* | |||||
class StartPendulumFragment: Fragment() { | |||||
private val args by navArgs<StartPendulumFragmentArgs>() | |||||
private lateinit var mMeasurementViewmodel: MeasurementViewmodel | |||||
override fun onCreateView( | |||||
inflater: LayoutInflater, container: ViewGroup?, | |||||
savedInstanceState: Bundle? | |||||
): View? { | |||||
// Inflate the layout for this fragment | |||||
val view = inflater.inflate(R.layout.fragment_start_pendulum, container, false) | |||||
mMeasurementViewmodel = ViewModelProvider(this).get(MeasurementViewmodel::class.java) | |||||
//navigate to pendulumFragment | |||||
view.startPendulum_btn.setOnClickListener{ | |||||
insertDataToDatabase() | |||||
} | |||||
return view | |||||
} | |||||
private fun insertDataToDatabase() { | |||||
val targetVelocity = (targetVelocity_et.text).toString() | |||||
val maxAttemptTime = (maxAttemptTime_et.text).toString() | |||||
val owner = args.owner | |||||
if(inputCheck(targetVelocity, maxAttemptTime)){ | |||||
//Create Measurement Object | |||||
val measurement = Measurement(UUID.randomUUID().toString(), targetVelocity.toFloat(),maxAttemptTime.toFloat(),0.0f,0.00f,0.00f,owner) | |||||
//Add Data to Database | |||||
mMeasurementViewmodel.addMeasurement(measurement) | |||||
Toast.makeText(requireContext(),"Successfully added!", Toast.LENGTH_LONG).show() | |||||
//Navigate Back | |||||
val action = StartPendulumFragmentDirections.actionStartPendulumFragmentToPendulumFragment(targetVelocity.toFloat(),maxAttemptTime.toFloat(),owner) | |||||
findNavController().navigate(action) | |||||
}else{ | |||||
Toast.makeText(requireContext(),"Please fill out all fields.", Toast.LENGTH_LONG).show() | |||||
} | |||||
} | |||||
private fun inputCheck(targetVelocity: String, maxAttemptTime: String): Boolean{ | |||||
val validated = !TextUtils.isEmpty(targetVelocity) && !TextUtils.isEmpty(maxAttemptTime) | |||||
return validated | |||||
} | |||||
} | |||||
@ -1,4 +1,15 @@ | |||||
package com.example.acapendulum20.repository | package com.example.acapendulum20.repository | ||||
class MeasurementRepository { | |||||
import androidx.lifecycle.LiveData | |||||
import com.example.acapendulum20.data.MeasurementDao | |||||
import com.example.acapendulum20.data.UserDao | |||||
import com.example.acapendulum20.model.Measurement | |||||
import com.example.acapendulum20.model.User | |||||
class MeasurementRepository(private val measurementDao: MeasurementDao) { | |||||
suspend fun addMeasurement(measurement: Measurement){ | |||||
measurementDao.addMeasurement(measurement) | |||||
} | |||||
} | } |
@ -1,4 +1,34 @@ | |||||
package com.example.acapendulum20.viewmodel | package com.example.acapendulum20.viewmodel | ||||
class MeasurementViewmodel { | |||||
import android.app.Application | |||||
import androidx.lifecycle.AndroidViewModel | |||||
import androidx.lifecycle.LiveData | |||||
import androidx.lifecycle.viewModelScope | |||||
import com.example.acapendulum20.data.MeasurementDao | |||||
import com.example.acapendulum20.data.MeasurementDatabase | |||||
import com.example.acapendulum20.data.UserDatabase | |||||
import com.example.acapendulum20.data.UserDatabase.Companion.getDatabase | |||||
import com.example.acapendulum20.model.Measurement | |||||
import com.example.acapendulum20.model.User | |||||
import com.example.acapendulum20.repository.MeasurementRepository | |||||
import com.example.acapendulum20.repository.UserRepository | |||||
import kotlinx.coroutines.Dispatchers | |||||
import kotlinx.coroutines.launch | |||||
class MeasurementViewmodel(application: Application): AndroidViewModel(application) { | |||||
private val repository: MeasurementRepository | |||||
init{ | |||||
val measurementDao = MeasurementDatabase.getDatabase(application).measurementDao() | |||||
repository = MeasurementRepository(measurementDao) | |||||
} | |||||
fun addMeasurement(measurement: Measurement){ | |||||
viewModelScope.launch(Dispatchers.IO){ | |||||
repository.addMeasurement(measurement) | |||||
} | |||||
} | |||||
} | } |