From 9ed5d7bb5f70e9c9e3637e99292a079dab6439c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deniz=20D=C3=BCzg=C3=B6ren?= Date: Sat, 22 Feb 2020 08:02:01 +0100 Subject: [PATCH] Fragments now get data class instances from Room instead of having them passed through a Bundle object; ClassSessionSheet.kt now keeps screen turned on; renamed *BottomSheet.kt to *Sheet.kt --- .../executionHistory/executionHistory.bin | Bin 2419412 -> 3405153 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/6.1-rc-1/fileHashes/fileHashes.bin | Bin 160383 -> 163183 bytes .gradle/6.1-rc-1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../fileHashes/resourceHashesCache.bin | Bin 30975 -> 69261 bytes .../6.1-rc-1/javaCompile/classAnalysis.bin | Bin 383059 -> 711195 bytes .gradle/6.1-rc-1/javaCompile/jarAnalysis.bin | Bin 529988 -> 2052171 bytes .gradle/6.1-rc-1/javaCompile/javaCompile.lock | Bin 17 -> 17 bytes .gradle/6.1-rc-1/javaCompile/taskHistory.bin | Bin 37158 -> 37158 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 21449 -> 21593 bytes .gradle/checksums/checksums.lock | Bin 17 -> 17 bytes .idea/modules/app/app.iml | 14 +- .idea/vcs.xml | 6 + app/build.gradle | 1 + .../com/denizd/qwark/activity/MainActivity.kt | 53 +++---- .../com/denizd/qwark/adapter/CourseAdapter.kt | 11 +- .../qwark/adapter/ParticipationAdapter.kt | 11 +- .../denizd/qwark/database/CourseRepository.kt | 2 + .../denizd/qwark/database/FinalsRepository.kt | 2 +- .../denizd/qwark/database/GradeRepository.kt | 1 + .../denizd/qwark/database/NoteRepository.kt | 1 + .../qwark/database/ParticipationRepository.kt | 16 +- .../com/denizd/qwark/database/QwarkDao.kt | 14 +- .../denizd/qwark/fragment/CourseFragment.kt | 51 +++--- .../denizd/qwark/fragment/FinalsFragment.kt | 71 ++++----- .../denizd/qwark/fragment/GradeFragment.kt | 63 ++++---- .../com/denizd/qwark/fragment/NoteFragment.kt | 26 ++-- .../fragment/ParticipationCourseFragment.kt | 49 ++++-- .../qwark/fragment/ParticipationFragment.kt | 11 +- .../denizd/qwark/fragment/QwarkFragment.kt | 11 +- .../denizd/qwark/fragment/SettingsFragment.kt | 28 ++-- .../denizd/qwark/sheet/ClassSessionSheet.kt | 40 +++-- ...BottomSheet.kt => ConfirmDeletionSheet.kt} | 2 +- ...rsesBottomSheet.kt => CopyCoursesSheet.kt} | 4 +- ...ateBottomSheet.kt => CourseCreateSheet.kt} | 13 +- ...nsBottomSheet.kt => CourseOptionsSheet.kt} | 17 +- ...ateBottomSheet.kt => FinalsCreateSheet.kt} | 23 +-- ...sLinkBottomSheet.kt => FinalsLinkSheet.kt} | 32 ++-- ...nsBottomSheet.kt => FinalsOptionsSheet.kt} | 18 +-- ...eateBottomSheet.kt => GradeCreateSheet.kt} | 24 +-- ...ttomSheet.kt => HistoricalAverageSheet.kt} | 2 +- ...ickerBottomSheet.kt => IconPickerSheet.kt} | 4 +- ...reateBottomSheet.kt => NoteCreateSheet.kt} | 4 +- ...playBottomSheet.kt => NoteDisplaySheet.kt} | 17 +- ...ionsBottomSheet.kt => NoteOptionsSheet.kt} | 4 +- ...ttomSheet.kt => ParticipationLinkSheet.kt} | 4 +- ...tomSheet.kt => ScoreProfileCreateSheet.kt} | 2 +- ...tInputBottomSheet.kt => TextInputSheet.kt} | 2 +- ...reateBottomSheet.kt => YearCreateSheet.kt} | 2 +- .../com/denizd/qwark/util/CourseFunctions.kt | 28 ++++ ...GradeCalculations.kt => GradeFunctions.kt} | 0 .../com/denizd/qwark/util/OnBackPressed.kt | 2 +- .../com/denizd/qwark/util/QwarkPreferences.kt | 32 ++-- .../java/com/denizd/qwark/util/QwarkUtil.kt | 145 ++---------------- .../denizd/qwark/viewmodel/CourseViewModel.kt | 1 + .../denizd/qwark/viewmodel/FinalsViewModel.kt | 12 +- .../denizd/qwark/viewmodel/GradeViewModel.kt | 1 + .../denizd/qwark/viewmodel/NoteViewModel.kt | 4 +- .../viewmodel/ParticipationCourseViewModel.kt | 7 +- app/src/main/res/layout/activity_main.xml | 6 +- .../res/layout/final_grade_options_dialog.xml | 1 - app/src/main/res/values-de/strings.xml | 5 + app/src/main/res/values/strings.xml | 7 +- 64 files changed, 436 insertions(+), 471 deletions(-) create mode 100644 .idea/vcs.xml rename app/src/main/java/com/denizd/qwark/sheet/{ConfirmDeletionBottomSheet.kt => ConfirmDeletionSheet.kt} (96%) rename app/src/main/java/com/denizd/qwark/sheet/{CopyCoursesBottomSheet.kt => CopyCoursesSheet.kt} (92%) rename app/src/main/java/com/denizd/qwark/sheet/{CourseCreateBottomSheet.kt => CourseCreateSheet.kt} (92%) rename app/src/main/java/com/denizd/qwark/sheet/{CourseOptionsBottomSheet.kt => CourseOptionsSheet.kt} (77%) rename app/src/main/java/com/denizd/qwark/sheet/{FinalsCreateBottomSheet.kt => FinalsCreateSheet.kt} (75%) rename app/src/main/java/com/denizd/qwark/sheet/{FinalsLinkBottomSheet.kt => FinalsLinkSheet.kt} (74%) rename app/src/main/java/com/denizd/qwark/sheet/{FinalsOptionsBottomSheet.kt => FinalsOptionsSheet.kt} (79%) rename app/src/main/java/com/denizd/qwark/sheet/{GradeCreateBottomSheet.kt => GradeCreateSheet.kt} (91%) rename app/src/main/java/com/denizd/qwark/sheet/{HistoricalAverageBottomSheet.kt => HistoricalAverageSheet.kt} (95%) rename app/src/main/java/com/denizd/qwark/sheet/{IconPickerBottomSheet.kt => IconPickerSheet.kt} (94%) rename app/src/main/java/com/denizd/qwark/sheet/{NoteCreateBottomSheet.kt => NoteCreateSheet.kt} (94%) rename app/src/main/java/com/denizd/qwark/sheet/{NoteDisplayBottomSheet.kt => NoteDisplaySheet.kt} (71%) rename app/src/main/java/com/denizd/qwark/sheet/{NoteOptionsBottomSheet.kt => NoteOptionsSheet.kt} (94%) rename app/src/main/java/com/denizd/qwark/sheet/{ParticipationLinkBottomSheet.kt => ParticipationLinkSheet.kt} (93%) rename app/src/main/java/com/denizd/qwark/sheet/{ScoreProfileCreateBottomSheet.kt => ScoreProfileCreateSheet.kt} (95%) rename app/src/main/java/com/denizd/qwark/sheet/{TextInputBottomSheet.kt => TextInputSheet.kt} (94%) rename app/src/main/java/com/denizd/qwark/sheet/{YearCreateBottomSheet.kt => YearCreateSheet.kt} (96%) create mode 100644 app/src/main/java/com/denizd/qwark/util/CourseFunctions.kt rename app/src/main/java/com/denizd/qwark/util/{GradeCalculations.kt => GradeFunctions.kt} (100%) diff --git a/.gradle/6.1-rc-1/executionHistory/executionHistory.bin b/.gradle/6.1-rc-1/executionHistory/executionHistory.bin index 8efa01c38b4e0b41855f41a9d345e350b278a687..735bd3617c7da55cc8606d2abb3f7192bd21b919 100644 GIT binary patch delta 119147 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 diff --git a/.gradle/6.1-rc-1/executionHistory/executionHistory.lock b/.gradle/6.1-rc-1/executionHistory/executionHistory.lock index fe2d54b2c4bf64fcc3697f9e890a6bd0d38afc3c..5fa889a8fa82d3630c5ab27514775a91e13d54bb 100644 GIT binary patch literal 17 VcmZSHUlX!OWnbP=1~6b=3jj6{1o{8~ literal 17 UcmZSHUlX!OWnbP=1_(F{05&QG7XSbN diff --git a/.gradle/6.1-rc-1/fileHashes/fileHashes.bin b/.gradle/6.1-rc-1/fileHashes/fileHashes.bin index 82e0c64ce16937a44a4a87a9c116b6d5c1d2dcc9..1ee6e9cd6414c5f3e61a4af9f4b7f819386e8fae 100644 GIT binary patch delta 38724 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
  • $RtoHqJIw#8r&Sl7%zBZ|}fAw9?yI)LI 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 diff --git a/.gradle/6.1-rc-1/fileHashes/fileHashes.lock b/.gradle/6.1-rc-1/fileHashes/fileHashes.lock index 8096c0d6b9da793e18c40b586a6d8dd5207baea3..eae7c11e4ea81ea3aba7f69cf7f13bc26a168dba 100644 GIT binary patch literal 17 VcmZS16VF}~^5EVZ1~4$Q1OPTb1q}cI literal 17 VcmZS16VF}~^5EVZ1~3qC0suAr1n>X= diff --git a/.gradle/6.1-rc-1/fileHashes/resourceHashesCache.bin b/.gradle/6.1-rc-1/fileHashes/resourceHashesCache.bin index 8e3b9ebcac8d7b26bb9ff60f40114bf0db0c4c21..620255fb9d310b6f88f434667ffe236a4b6a74fb 100644 GIT binary patch delta 12449 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 delta 767 zcmWlXO-PhM9EVrQLy<;7&W!odZf?5j`p&DZl^HZC#uGuEzCdO1I35 zcbT#6rpu+bx?FJ$EmyO=4XqWq|7TsUt9M9KXXsLrb*0Ep5!^^|Xx=4>8rF6xf~gLV zQU&X&nuK&kQM%wsx z9qwzJU)t2MYgx7>6$QqlKoBVibF$DOT4;JHw5Z-^&e&IpKcKi6khBLJRsxz+MIpwD zjO%`z`u+FVc|cQR_<2B*c2JX8tTovNXdm5j)A0*QDBkB2Rr&s?2Y9={x diff --git a/.gradle/6.1-rc-1/javaCompile/classAnalysis.bin b/.gradle/6.1-rc-1/javaCompile/classAnalysis.bin index 9c511236a1e3d1feb1638111032618966a902b96..a194bbafb86b8ceba10aeabdc9b122533f5e77df 100644 GIT binary patch delta 44466 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 r?hLHM8|+*!lxvJJ@yb%+k;a%)f$=3hQDt`cXS diff --git a/.gradle/6.1-rc-1/javaCompile/jarAnalysis.bin b/.gradle/6.1-rc-1/javaCompile/jarAnalysis.bin index 69183ff6f136e4c0716e0d7e055f0dc91535bc75..8ddf0259ca6728649dd08523e8201653a676d006 100644 GIT binary patch delta 316132 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 GME?TO`nOI1 delta 101 zcmX@Tp!Ucbg$*VWf?Vy(On2_6*uRwl1lZ#)PmYyPnCvR$G5M;L!Q@nFiOEx?4S4=T r0Rsag<3`0F;u{Sl#G4&G+8sR@ftU%1nSq!Eh*^P{ZM&lfJM%dJ2~j1< diff --git a/.gradle/6.1-rc-1/javaCompile/javaCompile.lock b/.gradle/6.1-rc-1/javaCompile/javaCompile.lock index 6e40d0383f0c7479758b2e3f5dd7501d9a697019..61d7aba2e6e489052ebb0a25aee0e4ad8527eb97 100644 GIT binary patch literal 17 UcmZS9RCAxIUMyI{00wN<034G7mjD0& literal 17 UcmZS9RCAxIUMyI{00zwY035*r$N&HU diff --git a/.gradle/6.1-rc-1/javaCompile/taskHistory.bin b/.gradle/6.1-rc-1/javaCompile/taskHistory.bin index d0975b02caeb0ca938aa1640b0553833ab5a49be..a0dc29f4e144f444e11908eec4dd20b155d19f33 100644 GIT binary patch delta 61 zcmV-D0K)&Kq5`I(0B;Hjo<@ delta 61 zcmV-D0K)&Kq5`I(0Y8c<@}Y&`;&lnH?s_Hjv*1oV_W;1-|LrE TVI2^fICVwMlTS!Cli`p>*f1X1 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index ae3034dc196b3b4196c292af948014064437aef6..2a0f1e5063d964ad49f27b414e88dd924f771449 100644 GIT binary patch literal 17 VcmZQRTfiXbA+Yr-0~oMY0RShY1G4}C literal 17 VcmZQRTfiXbA+Yr-0~jz)1^_3u1IPdX diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 983f72215bcc5a3f589083b46d42bf8c5d803ea1..a0217201d83b81ab2d99631242635a2ebb560c0a 100644 GIT binary patch delta 220 zcmX@Pobl!g#tkMCjB6&FN>m7R)%^JPw6gms0~myuPF^apL15yIts)v-Z*n1m!T&e= zNE=Lyt delta 68 zcmV-K0K5O$r~%2R0kAX}0i=^P7 - - + - + + + - - + @@ -134,11 +134,11 @@ - - + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index a80f982..cdd6d98 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,6 +56,7 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' implementation 'com.shawnlin:number-picker:2.4.8' diff --git a/app/src/main/java/com/denizd/qwark/activity/MainActivity.kt b/app/src/main/java/com/denizd/qwark/activity/MainActivity.kt index 826511f..8908afd 100644 --- a/app/src/main/java/com/denizd/qwark/activity/MainActivity.kt +++ b/app/src/main/java/com/denizd/qwark/activity/MainActivity.kt @@ -1,46 +1,39 @@ package com.denizd.qwark.activity -import android.Manifest import android.graphics.Color -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.view.ViewGroup import android.view.WindowManager -import android.widget.TextView -import androidx.core.app.ActivityCompat +import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Lifecycle import androidx.lifecycle.ViewModelProvider import com.denizd.qwark.R +import com.denizd.qwark.databinding.ActivityMainBinding import com.denizd.qwark.fragment.* -import com.denizd.qwark.fragment.CourseFragment -import com.denizd.qwark.fragment.ParticipationFragment import com.denizd.qwark.viewmodel.MainViewModel -import com.google.android.material.appbar.AppBarLayout -import com.google.android.material.bottomnavigation.BottomNavigationView -internal class MainActivity : AppCompatActivity(R.layout.activity_main) { +class MainActivity : FragmentActivity() { - private lateinit var toolbarTitle: TextView - private lateinit var bottomNavigationView: BottomNavigationView private lateinit var viewModel: MainViewModel + private var _binding: ActivityMainBinding? = null + private val binding: ActivityMainBinding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setTheme(R.style.AppTheme) + _binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) - ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 42) +// ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 42) viewModel = ViewModelProvider(this)[MainViewModel::class.java] viewModel.applyTheme(window, this) viewModel.checkForFirstTimeYearNotice(this) - val actionBar = findViewById(R.id.app_bar_layout) - toolbarTitle = findViewById(R.id.toolbarTxt) - bottomNavigationView = findViewById(R.id.bottom_nav) - - findViewById(R.id.app_bar_layout).also { appBarLayout -> + binding.appBarLayout.also { appBarLayout -> appBarLayout.setOnApplyWindowInsetsListener { _, insets -> (appBarLayout.layoutParams as ViewGroup.MarginLayoutParams) .topMargin = insets.systemWindowInsetTop @@ -48,6 +41,7 @@ internal class MainActivity : AppCompatActivity(R.layout.activity_main) { } } + // TODO remove this translucent app bar layout stuff, it's hard to maintain window.decorView.systemUiVisibility = if (resources.getBoolean(R.bool.isLight)) { View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR } else { @@ -59,8 +53,8 @@ internal class MainActivity : AppCompatActivity(R.layout.activity_main) { } window.statusBarColor = Color.TRANSPARENT - bottomNavigationView.setOnNavigationItemSelectedListener { item -> - actionBar.setExpanded(true) + binding.bottomNav.setOnNavigationItemSelectedListener { item -> + binding.appBarLayout.setExpanded(true) loadFragment(viewModel.getFragmentType(item.itemId)) } @@ -89,11 +83,16 @@ internal class MainActivity : AppCompatActivity(R.layout.activity_main) { override fun onResume() { super.onResume() if (supportFragmentManager.fragments.size == 0) { - bottomNavigationView.selectedItemId = R.id.courses + binding.bottomNav.selectedItemId = R.id.courses loadFragment(viewModel.getFragmentType(R.id.courses)) } } + override fun onDestroy() { + super.onDestroy() + _binding = null + } + private fun loadFragment(type: String): Boolean { val fragment = supportFragmentManager.findFragmentByTag(type) ?: viewModel.getFragment(type) @@ -101,8 +100,10 @@ internal class MainActivity : AppCompatActivity(R.layout.activity_main) { return false } - supportFragmentManager.beginTransaction().replace(R.id.fragment_container, fragment, type) - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit() + supportFragmentManager.beginTransaction() + .replace(R.id.fragment_container, fragment, type) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() // with (supportFragmentManager) { // beginTransaction() @@ -118,8 +119,8 @@ internal class MainActivity : AppCompatActivity(R.layout.activity_main) { // Log.d("TAG2", "${supportFragmentManager.}") // supportFragmentManager.fragments[0].tag} ${supportFragmentManager.fragments[0].javaClass.simpleName when (supportFragmentManager.fragments[0].tag) { "GradeFragment", "ParticipationCourseFragment" -> { - bottomNavigationView.visibility = View.INVISIBLE - findViewById(R.id.view).visibility = View.INVISIBLE + binding.bottomNav.visibility = View.INVISIBLE + binding.view.visibility = View.INVISIBLE super.onBackPressed() } "NoteFragment" -> { @@ -128,8 +129,8 @@ internal class MainActivity : AppCompatActivity(R.layout.activity_main) { } } else -> { - bottomNavigationView.visibility = View.VISIBLE - findViewById(R.id.view).visibility = View.VISIBLE + binding.bottomNav.visibility = View.VISIBLE + binding.view.visibility = View.VISIBLE super.onBackPressed() } } diff --git a/app/src/main/java/com/denizd/qwark/adapter/CourseAdapter.kt b/app/src/main/java/com/denizd/qwark/adapter/CourseAdapter.kt index 7a04595..6f86dd0 100644 --- a/app/src/main/java/com/denizd/qwark/adapter/CourseAdapter.kt +++ b/app/src/main/java/com/denizd/qwark/adapter/CourseAdapter.kt @@ -12,6 +12,7 @@ import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.model.Course import com.denizd.qwark.model.CourseExam import com.denizd.qwark.util.getUserDefinedAverage +import com.denizd.qwark.util.round import com.denizd.qwark.util.roundToInt class CourseAdapter(private var courses: List, @@ -69,14 +70,16 @@ class CourseAdapter(private var courses: List, else -> context.getString(R.string.average_grade_placeholder, currentItem.average.getUserDefinedAverage(gradeType)) } } - var timeLeft = ((currentItem.examTime.toDouble() - QwarkUtil.timeAtMidnight.toDouble()) / (1000.0 * 60.0 * 60.0 * 24.0)).roundToInt() - val examText = when (timeLeft) { + val examText = when (val timeLeft = ((currentItem.examTime.toDouble() - QwarkUtil.timeAtMidnight.toDouble()) / (1000.0 * 60.0 * 60.0 * 24.0)).roundToInt()) { 0 -> context.getString(R.string.exam_today_placeholder) else -> { when { timeLeft > 7 -> { - timeLeft /= 7 - context.resources.getQuantityString(R.plurals.exam_weeks_placeholder, timeLeft, timeLeft.toString()) + context.resources.getQuantityString( + R.plurals.exam_weeks_placeholder, + 2, + (timeLeft.toDouble() / 7.0).round(1).toString() + ) } timeLeft in 1..7 -> context.resources.getQuantityString(R.plurals.exam_days_placeholder, timeLeft, timeLeft.toString()) else -> "" diff --git a/app/src/main/java/com/denizd/qwark/adapter/ParticipationAdapter.kt b/app/src/main/java/com/denizd/qwark/adapter/ParticipationAdapter.kt index e082df9..c11dc41 100644 --- a/app/src/main/java/com/denizd/qwark/adapter/ParticipationAdapter.kt +++ b/app/src/main/java/com/denizd/qwark/adapter/ParticipationAdapter.kt @@ -53,7 +53,16 @@ class ParticipationAdapter(private var participations: List, priv } } )) - holder.time.text = QwarkUtil.getSimpleDateTimeFormat().format(Date(currentItem.time)) + holder.time.text = buildString { + append(QwarkUtil.getSimpleDateTimeFormat().format(Date(currentItem.time))) + + // TODO this checks the time on fragment launch, but it doesn't change, even if the time has passed + append(if (currentItem.time > System.currentTimeMillis() - 1000 * 60 * 90) { + holder.time.context.getString(R.string.participation_resumable) + } else { + "" + }) + } holder.participationText.text = holder.participationText.context.getString( R.string.participation_placeholder, currentItem.timesHandRaised.toString(), diff --git a/app/src/main/java/com/denizd/qwark/database/CourseRepository.kt b/app/src/main/java/com/denizd/qwark/database/CourseRepository.kt index b4fb4c7..e9ad0b0 100644 --- a/app/src/main/java/com/denizd/qwark/database/CourseRepository.kt +++ b/app/src/main/java/com/denizd/qwark/database/CourseRepository.kt @@ -21,4 +21,6 @@ internal class CourseRepository(app: Application) { fun getCoursesByYearId(yearId: Int): LiveData> = dao.getCoursesByYearId(yearId) fun getAveragesForCourses(courseId: Int): List = dao.getAveragesForCourses(courseId) + + fun getCourse(courseId: Int): CourseExam = dao.getCourse(courseId)[0] } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/database/FinalsRepository.kt b/app/src/main/java/com/denizd/qwark/database/FinalsRepository.kt index ec8b152..3cff5aa 100644 --- a/app/src/main/java/com/denizd/qwark/database/FinalsRepository.kt +++ b/app/src/main/java/com/denizd/qwark/database/FinalsRepository.kt @@ -42,6 +42,6 @@ class FinalsRepository(app: Application) { fun getAllCourses() = dao.getAllCourseExams() fun getCourse(courseId: Int) = dao.getCourse(courseId)[0] - + fun getFinalGrade(finalGradeId: Int) = dao.getFinalGrade(finalGradeId)[0] fun update(finalGrade: FinalGrade) { dao.update(finalGrade) } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/database/GradeRepository.kt b/app/src/main/java/com/denizd/qwark/database/GradeRepository.kt index a8cb9c0..216eb32 100644 --- a/app/src/main/java/com/denizd/qwark/database/GradeRepository.kt +++ b/app/src/main/java/com/denizd/qwark/database/GradeRepository.kt @@ -27,4 +27,5 @@ class GradeRepository(app: Application) { } fun getGradesByForeignKey(courseId: Int): LiveData> = dao.getGradesByForeignKey(courseId) + fun getGrade(gradeId: Int) = dao.getGrade(gradeId)[0] } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/database/NoteRepository.kt b/app/src/main/java/com/denizd/qwark/database/NoteRepository.kt index f9f4db9..084c86b 100644 --- a/app/src/main/java/com/denizd/qwark/database/NoteRepository.kt +++ b/app/src/main/java/com/denizd/qwark/database/NoteRepository.kt @@ -16,4 +16,5 @@ class NoteRepository(app: Application) { fun update(note: Note) { dao.update(note) } fun updateDismissed(newDismissedStatus: Boolean, noteId: Int) { dao.updateDismissed(newDismissedStatus, noteId) } fun delete(noteId: Int) { dao.deleteNote(noteId) } + fun getNote(noteId: Int) = dao.getNote(noteId)[0] } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/database/ParticipationRepository.kt b/app/src/main/java/com/denizd/qwark/database/ParticipationRepository.kt index ce6610b..5a7cd2c 100644 --- a/app/src/main/java/com/denizd/qwark/database/ParticipationRepository.kt +++ b/app/src/main/java/com/denizd/qwark/database/ParticipationRepository.kt @@ -3,14 +3,12 @@ package com.denizd.qwark.database import android.app.Application import android.util.Log import androidx.lifecycle.LiveData -import com.denizd.qwark.util.QwarkPreferences import com.denizd.qwark.model.Course import com.denizd.qwark.model.CourseExam import com.denizd.qwark.model.Participation import com.denizd.qwark.model.SchoolDay -import com.denizd.qwark.util.QwarkUtil -import com.denizd.qwark.util.round -import com.denizd.qwark.util.roundToInt +import com.denizd.qwark.util.* +import com.denizd.qwark.util.QwarkPreferences import java.util.* class ParticipationRepository(app: Application) { @@ -46,8 +44,7 @@ class ParticipationRepository(app: Application) { fun getDayType(): String = if (dayId in 1..5) days[dayId - 1] else days[1] fun getDays(): List = dao.getDays(prefs.getSchoolYear()) - fun getCourses(): List = QwarkUtil.getCoursesSorted( - dao.getCoursesByYearIdAsList(prefs.getSchoolYear()), + fun getCourses(): List = dao.getCoursesByYearIdAsList(prefs.getSchoolYear()).getSorted( prefs.getCourseSortType() ) fun link(courseId: Int) { dao.link(courseId, getDayType(), prefs.getSchoolYear()) } @@ -67,6 +64,11 @@ class ParticipationRepository(app: Application) { ) } fun delete(participation: Participation) { dao.delete(participation) } - fun updateParticipation(participation: String, courseId: Int) { dao.updateParticipation(participation, courseId) } + fun updateParticipation(participation: String, courseId: Int) { + dao.updateParticipation(participation, courseId) + } + fun updateParticipation(timesHandRaised: Int, timesSpoken: Int, participationId: Int) { + dao.updateParticipation(timesHandRaised, timesSpoken, participationId) + } fun getSchoolYearName() = prefs.getSchoolYearName() } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/database/QwarkDao.kt b/app/src/main/java/com/denizd/qwark/database/QwarkDao.kt index 341a0ad..27fd695 100644 --- a/app/src/main/java/com/denizd/qwark/database/QwarkDao.kt +++ b/app/src/main/java/com/denizd/qwark/database/QwarkDao.kt @@ -47,6 +47,9 @@ interface QwarkDao { @Query("UPDATE course SET participation = :participation WHERE course_id = :courseId") fun updateParticipation(participation: String, courseId: Int) + @Query("UPDATE participation SET times_hand_raised = :timesHandRaised, times_spoken = :timesSpoken WHERE participation_id = :participationId") + fun updateParticipation(timesHandRaised: Int, timesSpoken: Int, participationId: Int) + // grades @get:Query("SELECT * FROM grade ORDER BY time") @@ -64,6 +67,9 @@ interface QwarkDao { @Query("DELETE FROM grade WHERE grade_id = :gradeId") fun deleteGrade(gradeId: Int) + @Query("SELECT * FROM grade WHERE grade_id = :gradeId") + fun getGrade(gradeId: Int): List + // notes @get:Query("SELECT * FROM note ORDER BY time DESC") @@ -90,6 +96,9 @@ interface QwarkDao { @Query("SELECT DISTINCT category FROM note") fun getAllCategories(): List + @Query("SELECT * FROM note WHERE note_id = :noteId") + fun getNote(noteId: Int): List + // historical averages @get:Query("SELECT * FROM historical_avg ORDER BY course_id DESC") @@ -155,6 +164,9 @@ interface QwarkDao { @Insert fun insertAll(finalGrades: Array) + @Query("SELECT * FROM final_grade WHERE final_grade_id = :finalGradeId") + fun getFinalGrade(finalGradeId: Int): List + // school days @Insert @@ -174,7 +186,7 @@ interface QwarkDao { @Query("DELETE FROM course_schoolday_relation WHERE relation_id = :relationId") fun removeLink(relationId: Int) - @Query("SELECT * FROM participation WHERE course_id = :courseId") + @Query("SELECT * FROM participation WHERE course_id = :courseId ORDER BY time DESC") fun getAllParticipationsForCourse(courseId: Int): LiveData> @Insert diff --git a/app/src/main/java/com/denizd/qwark/fragment/CourseFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/CourseFragment.kt index 470596c..ae3eea2 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/CourseFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/CourseFragment.kt @@ -8,44 +8,44 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentTransaction +import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.denizd.qwark.R import com.denizd.qwark.adapter.CourseAdapter -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet -import com.denizd.qwark.sheet.CourseCreateBottomSheet -import com.denizd.qwark.sheet.CourseOptionsBottomSheet -import com.denizd.qwark.util.QwarkUtil +import com.denizd.qwark.sheet.ConfirmDeletionSheet +import com.denizd.qwark.sheet.CourseCreateSheet +import com.denizd.qwark.sheet.CourseOptionsSheet import com.denizd.qwark.databinding.* -import com.denizd.qwark.sheet.HistoricalAverageBottomSheet +import com.denizd.qwark.sheet.HistoricalAverageSheet import com.denizd.qwark.model.Course import com.denizd.qwark.model.CourseExam import com.denizd.qwark.util.calculateTotalAverage +import com.denizd.qwark.util.getSorted import com.denizd.qwark.viewmodel.CourseViewModel import com.google.android.material.snackbar.Snackbar import java.lang.NumberFormatException -internal class CourseFragment : QwarkFragment(), CourseAdapter.CourseClickListener { +class CourseFragment : QwarkFragment(), CourseAdapter.CourseClickListener { private var _binding: PaddedRecyclerViewBinding? = null private val binding: PaddedRecyclerViewBinding get() = _binding!! - private lateinit var viewModel: CourseViewModel + private val viewModel: CourseViewModel by viewModels() private lateinit var recyclerViewAdapter: CourseAdapter private var scrollPosition: Parcelable? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - viewModel = ViewModelProvider(this)[CourseViewModel::class.java] recyclerViewAdapter = CourseAdapter(ArrayList(), this, viewModel.getGradeType()) viewModel.allCourses.observe(this, Observer { courses -> - val c = QwarkUtil.getCoursesSorted(courses, viewModel.getCourseSortType()) - recyclerViewAdapter.setCourses(c) + recyclerViewAdapter.setCourses(courses.getSorted(viewModel.getCourseSortType())) if (scrollPosition == null) { - binding.recyclerView.scrollToPosition(0) - binding.recyclerView.scheduleLayoutAnimation() + binding.recyclerView.apply { + scrollToPosition(0) + scheduleLayoutAnimation() + } } else { binding.recyclerView.layoutManager?.onRestoreInstanceState(scrollPosition) } @@ -105,16 +105,7 @@ internal class CourseFragment : QwarkFragment(), CourseAdapter.CourseClickListen override fun onResume() { super.onResume() binding.recyclerView.apply { - applyPadding(verticalPadding = 4) - /** - * On first app launch, setting the padding will not scroll the recycler view items - * down. This is a workaround to scroll the recycler view down programmatically. - */ - // TODO this actually doesn't do anything -// if (!QwarkUtil.hasAppLaunched) { -// scrollToPosition(0) -// QwarkUtil.hasAppLaunched = true -// } + applyPadding(horizontalPadding = 4) } } @@ -142,8 +133,8 @@ internal class CourseFragment : QwarkFragment(), CourseAdapter.CourseClickListen } private fun createOptionsDialog(course: CourseExam) { - openBottomSheet(CourseOptionsBottomSheet().also { sheet -> - QwarkUtil.putCourseInBundle(sheet, course) + openBottomSheet(CourseOptionsSheet().also { sheet -> + sheet.arguments = Bundle().apply { putInt("courseId", course.courseId) } }) } @@ -162,7 +153,7 @@ internal class CourseFragment : QwarkFragment(), CourseAdapter.CourseClickListen fun getAveragesForCourse(courseId: Int) = viewModel.getAveragesForCourses(courseId) fun createHistoryDialog(courseId: Int, course: String) { - openBottomSheet(HistoricalAverageBottomSheet().also { sheet -> + openBottomSheet(HistoricalAverageSheet().also { sheet -> sheet.arguments = Bundle(2).apply { putString("courseName", course) putInt("courseId", courseId) @@ -171,18 +162,20 @@ internal class CourseFragment : QwarkFragment(), CourseAdapter.CourseClickListen } fun createCourseDialog(course: CourseExam? = null) { - openBottomSheet(CourseCreateBottomSheet().also { sheet -> - if (course != null) QwarkUtil.putCourseInBundle(sheet, course) + openBottomSheet(CourseCreateSheet().also { sheet -> + if (course != null) sheet.arguments = Bundle().apply { putInt("courseId", course.courseId) } }) } fun deleteCourse(course: Course) { openBottomSheet( - ConfirmDeletionBottomSheet( + ConfirmDeletionSheet( getString(R.string.delete_course_and_data_confirmation, course.name) ) { viewModel.delete(course) } ) } + + fun getCourse(courseId: Int): CourseExam = viewModel.getCourse(courseId) } diff --git a/app/src/main/java/com/denizd/qwark/fragment/FinalsFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/FinalsFragment.kt index ce62084..df54c61 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/FinalsFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/FinalsFragment.kt @@ -3,27 +3,26 @@ package com.denizd.qwark.fragment import android.content.res.Configuration import android.os.Bundle import android.os.Parcelable -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.denizd.qwark.R import com.denizd.qwark.adapter.FinalGradeAdapter -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet -import com.denizd.qwark.sheet.FinalsCreateBottomSheet -import com.denizd.qwark.sheet.FinalsOptionsBottomSheet +import com.denizd.qwark.sheet.ConfirmDeletionSheet +import com.denizd.qwark.sheet.FinalsCreateSheet +import com.denizd.qwark.sheet.FinalsOptionsSheet import com.denizd.qwark.databinding.FinalsFragmentBinding -import com.denizd.qwark.sheet.FinalsLinkBottomSheet -import com.denizd.qwark.util.QwarkUtil +import com.denizd.qwark.sheet.FinalsLinkSheet import com.denizd.qwark.model.FinalGrade import com.denizd.qwark.viewmodel.FinalsViewModel import com.google.android.material.snackbar.Snackbar -internal class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeClickListener { +class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeClickListener { private lateinit var viewModel: FinalsViewModel private var _binding: FinalsFragmentBinding? = null @@ -44,7 +43,7 @@ internal class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeCli super.onCreate(savedInstanceState) viewModel = ViewModelProvider(this)[FinalsViewModel::class.java] viewModel.updateLinkedGrades { - viewModel.allFinalGrades?.observe(this, Observer { finalGrades -> + viewModel.allFinalGrades.observe(this, Observer { finalGrades -> // createOverview(finalGrades, view.rootView) // TODO export to bitmap if (basicScrollPosition == null) { binding.basicCoursesRecyclerview.scheduleLayoutAnimation() @@ -67,7 +66,7 @@ internal class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeCli binding.gradeTextview.text = "---" } else { pointsText = "$finalScore" - gradeText = getString(R.string.approximate_placeholder, viewModel.getFinalGrade(finalScore).toString()) + gradeText = getString(R.string.approximate_placeholder, viewModel.getFinalGradeScore(finalScore).toString()) setTextForGradeTextViews() } @@ -126,41 +125,42 @@ internal class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeCli } override fun onFinalGradeClick(finalGrade: FinalGrade) { - openBottomSheet(FinalsOptionsBottomSheet().also { sheet -> - QwarkUtil.putFinalGradeInBundle(sheet, finalGrade) + openBottomSheet(FinalsOptionsSheet().also { sheet -> + sheet.arguments = Bundle().apply { putInt("finalGradeId", finalGrade.finalGradeId) } }) } - internal fun createEditGradeSheet(finalGrade: FinalGrade) { - openBottomSheet(FinalsCreateBottomSheet().also { sheet -> - QwarkUtil.putFinalGradeInBundle(sheet, finalGrade) + fun createEditGradeSheet(finalGrade: FinalGrade) { + openBottomSheet(FinalsCreateSheet().also { sheet -> + sheet.arguments = Bundle().apply { putInt("finalGradeId", finalGrade.finalGradeId) } }) } - internal fun createLinkGradeSheet(finalGrade: FinalGrade) { - openBottomSheet(FinalsLinkBottomSheet().also { sheet -> - QwarkUtil.putFinalGradeInBundle(sheet, finalGrade) + fun createLinkGradeSheet(finalGrade: FinalGrade) { + openBottomSheet(FinalsLinkSheet().also { sheet -> + sheet.arguments = Bundle().apply { putInt("finalGradeId", finalGrade.finalGradeId) } }) } - internal fun getAllYears() = viewModel.getAllYears() - internal fun getAllCourses() = viewModel.getAllCourses() + fun getAllYears() = viewModel.getAllYears() + fun getAllCourses() = viewModel.getAllCourses() - internal fun viewLinkedCourse(courseId: Int) { - val f = GradeFragment() - QwarkUtil.putCourseInBundle(f, viewModel.getCourse(courseId)) - val d = viewModel.getSchoolYearName(courseId) - Log.d("TAG", d) - f.arguments?.putString("schoolYear", d) - activity?.supportFragmentManager?.beginTransaction() - ?.replace(R.id.fragment_container, f) - ?.addToBackStack("GradeFragment") - ?.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - ?.commit() + fun viewLinkedCourse(courseId: Int) { + val f = GradeFragment().also { fragment -> + fragment.arguments = Bundle().apply { + putInt("courseId", courseId) + putString("schoolYear", viewModel.getSchoolYearName(courseId)) + } + } + (context as FragmentActivity).supportFragmentManager.beginTransaction() + .replace(R.id.fragment_container, f) + .addToBackStack(f.name) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() } - internal fun clearFinalGrade(finalGrade: FinalGrade) { - val deletionSheet = ConfirmDeletionBottomSheet(getString(R.string.clear_final_grade_desc, finalGrade.name)) { + fun clearFinalGrade(finalGrade: FinalGrade) { + val deletionSheet = ConfirmDeletionSheet(getString(R.string.clear_final_grade_desc, finalGrade.name)) { val newFinalGrade = FinalGrade( name = "", grade = "-1", @@ -175,14 +175,14 @@ internal class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeCli openBottomSheet(deletionSheet) } - internal fun clearFinalGradeError() { + fun clearFinalGradeError() { Snackbar .make(snackBarContainer, getString(R.string.clear_final_grade_error), Snackbar.LENGTH_LONG) .setBackgroundTint(context.getColor(R.color.colorWarning)) .show() } - internal fun update(finalGrade: FinalGrade) { viewModel.update(finalGrade) } + fun update(finalGrade: FinalGrade) { viewModel.update(finalGrade) } // TODO perhaps replace with a bottom sheet // private fun createOverview(finalGrades: List, view: View) { @@ -284,6 +284,7 @@ internal class FinalsFragment : QwarkFragment(), FinalGradeAdapter.FinalGradeCli binding.finalExamsRecyclerview.layoutManager?.onRestoreInstanceState(examScrollPosition) } - internal fun getCourseSortType() = viewModel.getCourseSortType() + fun getCourseSortType() = viewModel.getCourseSortType() fun getGradeType() = viewModel.getGradeType() + fun getFinalGrade(finalGradeId: Int) = viewModel.getFinalGrade(finalGradeId) } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/fragment/GradeFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/GradeFragment.kt index e769a3f..41ba11c 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/GradeFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/GradeFragment.kt @@ -2,24 +2,22 @@ package com.denizd.qwark.fragment import android.os.Bundle import android.os.Parcelable -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentTransaction +import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager import com.denizd.qwark.R import com.denizd.qwark.adapter.GradeAdapter -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet -import com.denizd.qwark.sheet.GradeCreateBottomSheet +import com.denizd.qwark.sheet.ConfirmDeletionSheet +import com.denizd.qwark.sheet.GradeCreateSheet import com.denizd.qwark.databinding.GradeFragmentBinding import com.denizd.qwark.model.CourseExam import com.denizd.qwark.model.Grade import com.denizd.qwark.model.HistoricalAvg -import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.util.calculateAverage import com.denizd.qwark.util.getUserDefinedAverage import com.denizd.qwark.viewmodel.GradeViewModel @@ -34,7 +32,7 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { private lateinit var weightingString: String private lateinit var adapter: GradeAdapter - private lateinit var viewModel: GradeViewModel + private val viewModel: GradeViewModel by viewModels() private lateinit var inflater: LayoutInflater private var _binding: GradeFragmentBinding? = null @@ -45,12 +43,9 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - viewModel = ViewModelProvider(this)[GradeViewModel::class.java] - -// currentCourse = QwarkUtil.getCourseFromBundle(arguments) schoolYear = arguments?.getString("schoolYear") ?: "" currentCourse = viewModel.getCourse(arguments?.getInt("courseId") ?: -1) - average = currentCourse.average + average = currentCourse.average.getUserDefinedAverage(getGradeType()) weightingString = "${currentCourse.oralWeighting} / ${100 - currentCourse.oralWeighting}" viewModel.getGradesByForeignKey(currentCourse.courseId).observe(this, Observer { grades -> @@ -67,7 +62,7 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { average = filteredGrades.calculateAverage( currentCourse.oralWeighting ) - binding.average.text = if (filteredGrades.isEmpty()) "X" else average.getUserDefinedAverage(getGradeType()) + binding.average.text = if (filteredGrades.isEmpty()) "??" else average.getUserDefinedAverage(getGradeType()) viewModel.updateAverage(average, filteredGrades.size, currentCourse.courseId) } @@ -94,7 +89,7 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { currentCourse.name ) fab.hide() - with(view.rootView) { + with (view.rootView) { findViewById(R.id.bottom_nav).visibility = View.GONE findViewById(R.id.view).visibility = View.GONE } @@ -103,7 +98,7 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { presentGradeDialog() } - binding.average.text = currentCourse.average + binding.average.text = currentCourse.average.getUserDefinedAverage(getGradeType()) binding.weighting.text = weightingString binding.recyclerView.adapter = adapter @@ -135,12 +130,12 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { } private fun presentGradeDialog(grade: Grade? = null) { - openBottomSheet(GradeCreateBottomSheet().also { sheet -> - if (grade == null) { - sheet.arguments = Bundle(1).apply { putInt("courseId", currentCourse.courseId) } + openBottomSheet(GradeCreateSheet().also { sheet -> + sheet.arguments = Bundle(1).apply { if (grade == null) { + putInt("courseId", currentCourse.courseId) } else { - QwarkUtil.putGradeInBundle(sheet, grade) - } + putInt("gradeId", grade.gradeId) + }} }) } @@ -149,7 +144,7 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { } override fun onGradeLongClick(gradeId: Int) { - val deletionSheet = ConfirmDeletionBottomSheet(getString(R.string.confirm_grade_deletion)) { + val deletionSheet = ConfirmDeletionSheet(getString(R.string.confirm_grade_deletion)) { viewModel.delete(gradeId) } openBottomSheet(deletionSheet) @@ -157,23 +152,27 @@ class GradeFragment : QwarkFragment(), GradeAdapter.GradeClickListener { private fun openParticipationCourseFragment() { appBar.setExpanded(true) - val f = ParticipationCourseFragment() - f.arguments = Bundle().apply { - putString("course", currentCourse.name) - putInt("courseId", currentCourse.courseId) - putBoolean("advanced", currentCourse.advanced) + (context as FragmentActivity).supportFragmentManager.also { fm -> + if (fm.getBackStackEntryAt(0).name == "ParticipationCourseFragment") { + fm.popBackStack() + } else { + val f = ParticipationCourseFragment() + f.arguments = Bundle().apply { + putString("course", currentCourse.name) + putInt("courseId", currentCourse.courseId) + putBoolean("advanced", currentCourse.advanced) + } + fm.beginTransaction() + .replace(R.id.fragment_container, f) + .addToBackStack(f.name) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() + } } - // for targetFragment to work, ParticipationFragment needs to be active - // TODO fix the dependency on targetFragment (maybe introduce a ParticipationCourseViewModel) -// f.setTargetFragment((context as FragmentActivity).supportFragmentManager.findFragmentByTag("ParticipationFragment"), 42) - (context as FragmentActivity).supportFragmentManager.beginTransaction() - .replace(R.id.fragment_container, f) - .addToBackStack(f.name) - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .commit() } fun insert(grade: Grade) { viewModel.insert(grade) } fun update(grade: Grade) { viewModel.update(grade) } fun getGradeType(): Int = viewModel.getGradeType() + fun getGrade(gradeId: Int) = viewModel.getGrade(gradeId) } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/fragment/NoteFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/NoteFragment.kt index 4948db5..d27714e 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/NoteFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/NoteFragment.kt @@ -11,14 +11,13 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.denizd.qwark.R import com.denizd.qwark.adapter.NoteAdapter -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet -import com.denizd.qwark.sheet.NoteCreateBottomSheet -import com.denizd.qwark.sheet.NoteDisplayBottomSheet -import com.denizd.qwark.sheet.NoteOptionsBottomSheet +import com.denizd.qwark.sheet.ConfirmDeletionSheet +import com.denizd.qwark.sheet.NoteCreateSheet +import com.denizd.qwark.sheet.NoteDisplaySheet +import com.denizd.qwark.sheet.NoteOptionsSheet import com.denizd.qwark.util.OnBackPressed import com.denizd.qwark.databinding.* import com.denizd.qwark.model.Note -import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.viewmodel.NoteViewModel import com.google.android.material.appbar.AppBarLayout @@ -82,7 +81,7 @@ class NoteFragment : QwarkFragment(), NoteAdapter.OnNoteClickListener, OnBackPre override fun onResume() { super.onResume() - binding.recyclerView.applyPadding(verticalPadding = 4) + binding.recyclerView.applyPadding(horizontalPadding = 4) } override fun onDestroy() { @@ -113,8 +112,8 @@ class NoteFragment : QwarkFragment(), NoteAdapter.OnNoteClickListener, OnBackPre } override fun onNoteClick(note: Note) { - openBottomSheet(NoteDisplayBottomSheet().also { sheet -> - QwarkUtil.putNoteInBundle(sheet, note) + openBottomSheet(NoteDisplaySheet().also { sheet -> + sheet.arguments = Bundle().apply { putInt("noteId", note.noteId) } }) } @@ -124,7 +123,7 @@ class NoteFragment : QwarkFragment(), NoteAdapter.OnNoteClickListener, OnBackPre } fun deleteNote(noteId: Int) { - val deletionSheet = ConfirmDeletionBottomSheet(getString(R.string.confirm_note_deletion)) { + val deletionSheet = ConfirmDeletionSheet(getString(R.string.confirm_note_deletion)) { scrollPosition = binding.recyclerView.layoutManager?.onSaveInstanceState() viewModel.delete(noteId) binding.recyclerView.scheduleLayoutAnimation() @@ -141,14 +140,14 @@ class NoteFragment : QwarkFragment(), NoteAdapter.OnNoteClickListener, OnBackPre } private fun createOptionsSheet(note: Note) { - openBottomSheet(NoteOptionsBottomSheet().also { sheet -> - QwarkUtil.putNoteInBundle(sheet, note) + openBottomSheet(NoteOptionsSheet().also { sheet -> + sheet.arguments = Bundle().apply { putInt("noteId", note.noteId) } }) } fun createNoteDialog(note: Note? = null) { - val createSheet = NoteCreateBottomSheet().also { sheet -> - if (note != null) QwarkUtil.putNoteInBundle(sheet, note) + val createSheet = NoteCreateSheet().also { sheet -> + if (note != null) sheet.arguments = Bundle().apply { putInt("noteId", note.noteId) } } openBottomSheet(createSheet) } @@ -165,4 +164,5 @@ class NoteFragment : QwarkFragment(), NoteAdapter.OnNoteClickListener, OnBackPre fun insert(note: Note) { viewModel.insert(note) } fun update(note: Note) { viewModel.update(note) } fun getAllCategories(): List = viewModel.getAllCategories() + fun getNote(noteId: Int) = viewModel.getNote(noteId) } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/fragment/ParticipationCourseFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/ParticipationCourseFragment.kt index 8109c3c..d725921 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/ParticipationCourseFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/ParticipationCourseFragment.kt @@ -14,9 +14,10 @@ import com.denizd.qwark.adapter.ParticipationAdapter import com.denizd.qwark.databinding.GradeFragmentBinding import com.denizd.qwark.model.Participation import com.denizd.qwark.sheet.ClassSessionSheet -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet +import com.denizd.qwark.sheet.ConfirmDeletionSheet import com.denizd.qwark.viewmodel.ParticipationCourseViewModel import com.google.android.material.bottomnavigation.BottomNavigationView +import com.google.android.material.snackbar.Snackbar class ParticipationCourseFragment : QwarkFragment(), ParticipationAdapter.ParticipationClickListener { @@ -109,11 +110,24 @@ class ParticipationCourseFragment : QwarkFragment(), ParticipationAdapter.Partic } override fun onParticipationClick(participation: Participation) { - // do nothing + if (participation.time > System.currentTimeMillis() - 1000 * 60 * 90) { + openBottomSheet(ClassSessionSheet().also { sheet -> + sheet.arguments = Bundle(2).apply { + putInt("timesHandRaised", participation.timesHandRaised) + putInt("timesSpoken", participation.timesSpoken) + putInt("participationId", participation.participationId) + } + sheet.isCancelable = false + }) + } else { + Snackbar + .make(snackBarContainer, getString(R.string.participation_too_old), Snackbar.LENGTH_LONG) + .show() + } } override fun onParticipationLongClick(participation: Participation) { - openBottomSheet(ConfirmDeletionBottomSheet( + openBottomSheet(ConfirmDeletionSheet( getString(R.string.delete_participation_confirmation) ) { viewModel.delete(participation) @@ -122,19 +136,30 @@ class ParticipationCourseFragment : QwarkFragment(), ParticipationAdapter.Partic private fun openGradeFragment() { appBar.setExpanded(true) - val f = GradeFragment() - f.arguments = Bundle().apply { - putString("schoolYear", viewModel.getSchoolYearName()) - putInt("courseId", courseId) + (context as FragmentActivity).supportFragmentManager.also { fm -> + if (fm.getBackStackEntryAt(0).name == "GradeFragment") { + fm.popBackStack() + } else { + val f = GradeFragment() + f.arguments = Bundle().apply { + putString("schoolYear", viewModel.getSchoolYearName()) + putInt("courseId", courseId) + } + fm.beginTransaction() + .replace(R.id.fragment_container, f) + .addToBackStack("GradeFragment") + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() + } } - (context as FragmentActivity).supportFragmentManager.beginTransaction() - .replace(R.id.fragment_container, f) - .addToBackStack("GradeFragment") - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .commit() } fun createParticipation(timesHandRaised: Int, timesSpoken: Int, time: Long) { viewModel.createParticipation(timesHandRaised, timesSpoken, time, courseId) } + + // TODO this function has the same name as another one with a different function signature + fun updateParticipation(timesHandRaised: Int, timesSpoken: Int, participationId: Int) { + viewModel.updateParticipation(timesHandRaised, timesSpoken, participationId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/fragment/ParticipationFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/ParticipationFragment.kt index 93b7096..de714e1 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/ParticipationFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/ParticipationFragment.kt @@ -7,7 +7,6 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentTransaction -import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.StaggeredGridLayoutManager @@ -16,8 +15,8 @@ import com.denizd.qwark.adapter.CourseAdapter import com.denizd.qwark.databinding.PaddedRecyclerViewBinding import com.denizd.qwark.model.CourseExam import com.denizd.qwark.model.Participation -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet -import com.denizd.qwark.sheet.ParticipationLinkBottomSheet +import com.denizd.qwark.sheet.ConfirmDeletionSheet +import com.denizd.qwark.sheet.ParticipationLinkSheet import com.denizd.qwark.viewmodel.ParticipationViewModel internal class ParticipationFragment : QwarkFragment(), CourseAdapter.CourseClickListener { @@ -88,7 +87,7 @@ internal class ParticipationFragment : QwarkFragment(), CourseAdapter.CourseClic override fun onResume() { super.onResume() - binding.recyclerView.applyPadding(verticalPadding = 4) + binding.recyclerView.applyPadding(horizontalPadding = 4) } override fun onDestroy() { @@ -118,11 +117,11 @@ internal class ParticipationFragment : QwarkFragment(), CourseAdapter.CourseClic } private fun openLinkSheet() { - openBottomSheet(ParticipationLinkBottomSheet()) + openBottomSheet(ParticipationLinkSheet()) } private fun openRemoveLinkSheet(courseName: String, relationId: Int) { - openBottomSheet(ConfirmDeletionBottomSheet( + openBottomSheet(ConfirmDeletionSheet( getString(R.string.confirm_remove_participation_link, courseName, getDay()) ) { viewModel.removeLink(relationId) diff --git a/app/src/main/java/com/denizd/qwark/fragment/QwarkFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/QwarkFragment.kt index 803f12c..ab5de22 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/QwarkFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/QwarkFragment.kt @@ -50,8 +50,8 @@ open class QwarkFragment : Fragment() { * Initialise view resources */ statusBarView = view.rootView.findViewById(R.id.status_bar_view) - appBarTitleView = view.rootView.findViewById(R.id.toolbarTxt) - superTitleView = view.rootView.findViewById(R.id.text_above) + appBarTitleView = view.rootView.findViewById(R.id.app_bar_title) + superTitleView = view.rootView.findViewById(R.id.super_title) appBar = view.rootView.findViewById(R.id.app_bar_layout) snackBarContainer = view.rootView.findViewById(R.id.root_view) fab = view.rootView.findViewById(R.id.fab) @@ -93,11 +93,12 @@ open class QwarkFragment : Fragment() { * to its lifecycle owner and therefore cannot calculate the top padding properly. Invoke in * onResume instead. */ - protected fun T.applyPadding(verticalPadding: Int = 0) { + protected fun T.applyPadding(horizontalPadding: Int = 0) { + val horizontal = horizontalPadding.dpToPx() setPadding( - verticalPadding.dpToPx(), + horizontal, (statusBarView.height / 1) + appBar.height, - verticalPadding.dpToPx(), + horizontal, 0 ) } diff --git a/app/src/main/java/com/denizd/qwark/fragment/SettingsFragment.kt b/app/src/main/java/com/denizd/qwark/fragment/SettingsFragment.kt index e2adf9c..8a61540 100644 --- a/app/src/main/java/com/denizd/qwark/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/denizd/qwark/fragment/SettingsFragment.kt @@ -5,15 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter +import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProvider import com.denizd.qwark.R -import com.denizd.qwark.sheet.ConfirmDeletionBottomSheet -import com.denizd.qwark.sheet.CopyCoursesBottomSheet -import com.denizd.qwark.sheet.ScoreProfileCreateBottomSheet -import com.denizd.qwark.sheet.YearCreateBottomSheet +import com.denizd.qwark.sheet.ConfirmDeletionSheet +import com.denizd.qwark.sheet.CopyCoursesSheet +import com.denizd.qwark.sheet.ScoreProfileCreateSheet +import com.denizd.qwark.sheet.YearCreateSheet import com.denizd.qwark.databinding.SettingsFragmentBinding -import com.denizd.qwark.model.ScoreProfile import com.denizd.qwark.model.SchoolYear import com.denizd.qwark.viewmodel.SettingsViewModel import com.google.android.material.snackbar.Snackbar @@ -22,12 +21,7 @@ class SettingsFragment : QwarkFragment() { private var _binding: SettingsFragmentBinding? = null private val binding: SettingsFragmentBinding get() = _binding!! - private lateinit var viewModel: SettingsViewModel - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - viewModel = ViewModelProvider(this)[SettingsViewModel::class.java] - } + private val viewModel: SettingsViewModel by viewModels() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { _binding = SettingsFragmentBinding.inflate(inflater, container, false) @@ -120,7 +114,7 @@ class SettingsFragment : QwarkFragment() { if (binding.schoolYearDropdown.text.isNullOrBlank()) { presentErrorSnackBar(getString(R.string.no_school_year_selected)) } else { - val deleteYearSheet = ConfirmDeletionBottomSheet(getString(R.string.delete_school_year_desc, binding.schoolYearDropdown.text.toString())) { + val deleteYearSheet = ConfirmDeletionSheet(getString(R.string.delete_school_year_desc, binding.schoolYearDropdown.text.toString())) { viewModel.deleteSchoolYear() binding.schoolYearDropdown.setText("") } @@ -128,7 +122,7 @@ class SettingsFragment : QwarkFragment() { } } binding.copyCoursesButton.setOnClickListener { - openBottomSheet(CopyCoursesBottomSheet()) + openBottomSheet(CopyCoursesSheet()) } // binding.copyCoursesButton.setOnLongClickListener { // // TODO this is currently an experiment @@ -206,7 +200,7 @@ class SettingsFragment : QwarkFragment() { if (binding.scoreProfileDropdown.text.isNullOrBlank()) { presentErrorSnackBar(getString(R.string.no_score_profile_selected)) } else { - val deleteScoreProfileSheet = ConfirmDeletionBottomSheet( + val deleteScoreProfileSheet = ConfirmDeletionSheet( getString(R.string.delete_score_profile_desc, binding.scoreProfileDropdown.text.toString()) ) { @@ -243,7 +237,7 @@ class SettingsFragment : QwarkFragment() { if (edit && currentYear == "") { presentErrorSnackBar(getString(R.string.no_school_year_selected)) } else { - val yearCreateSheet = YearCreateBottomSheet().also { sheet -> + val yearCreateSheet = YearCreateSheet().also { sheet -> sheet.arguments = Bundle(1).apply { putString("currentYear", if (edit) currentYear else "") } @@ -264,7 +258,7 @@ class SettingsFragment : QwarkFragment() { if (edit && currentScoreProfile == "") { presentErrorSnackBar(getString(R.string.no_score_profile_selected)) } else { - openBottomSheet(ScoreProfileCreateBottomSheet().also { sheet -> + openBottomSheet(ScoreProfileCreateSheet().also { sheet -> sheet.arguments = Bundle(1).apply { putString("currentScoreProfile", if (edit) currentScoreProfile else "") } diff --git a/app/src/main/java/com/denizd/qwark/sheet/ClassSessionSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/ClassSessionSheet.kt index b64b2df..b5f9fdf 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/ClassSessionSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/ClassSessionSheet.kt @@ -7,6 +7,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.WindowManager import android.widget.Toast import com.denizd.qwark.R import com.denizd.qwark.databinding.ClassSessionSheetBinding @@ -32,6 +33,7 @@ class ClassSessionSheet : BottomSheetDialogFragment() { field = value binding.spokenButton.text = "$value" } + private var participationId = -1 private val time: Long = System.currentTimeMillis() override fun onAttach(context: Context) { @@ -46,12 +48,20 @@ class ClassSessionSheet : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + participationFragment = targetFragment as ParticipationCourseFragment + arguments?.let { args -> + timesHandRaised = args.getInt ("timesHandRaised") + timesSpoken = args.getInt("timesSpoken") + participationId = args.getInt("participationId") + binding.title.text = getString(R.string.class_session_resumed) + } + binding.handRaisedButton.apply { - setCompoundDrawables(context.getDrawable(R.drawable.hand).also { drawable -> - drawable?.bounds = Rect(0, 0, 256, 256) - drawable?.setTint(mContext.getColor(R.color.colorAccent)) + setCompoundDrawables(context.getDrawable(R.drawable.hand)?.also { drawable -> + drawable.bounds = Rect(0, 0, 256, 256) + drawable.setTint(mContext.getColor(R.color.colorAccent)) }, null, null, null) text = "$timesHandRaised" setOnClickListener { @@ -66,9 +76,9 @@ class ClassSessionSheet : BottomSheetDialogFragment() { } } binding.spokenButton.apply { - setCompoundDrawables(context.getDrawable(R.drawable.speech).also { drawable -> - drawable?.bounds = Rect(0, 0, 256, 256) - drawable?.setTint(mContext.getColor(R.color.colorAccent)) + setCompoundDrawables(context.getDrawable(R.drawable.speech)?.also { drawable -> + drawable.bounds = Rect(0, 0, 256, 256) + drawable.setTint(mContext.getColor(R.color.colorAccent)) }, null, null, null) text = "$timesSpoken" setOnClickListener { @@ -104,6 +114,16 @@ class ClassSessionSheet : BottomSheetDialogFragment() { } } + override fun onResume() { + super.onResume() + activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + + override fun onPause() { + super.onPause() + activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + override fun onDestroy() { super.onDestroy() _binding = null @@ -116,8 +136,10 @@ class ClassSessionSheet : BottomSheetDialogFragment() { } private fun finish() { - participationFragment.createParticipation( - timesHandRaised, timesSpoken, time - ) + if (participationId == -1) { + participationFragment.createParticipation(timesHandRaised, timesSpoken, time) + } else { + participationFragment.updateParticipation(timesHandRaised, timesSpoken, participationId) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/sheet/ConfirmDeletionBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/ConfirmDeletionSheet.kt similarity index 96% rename from app/src/main/java/com/denizd/qwark/sheet/ConfirmDeletionBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/ConfirmDeletionSheet.kt index cfc5538..fcd6b6e 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/ConfirmDeletionBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/ConfirmDeletionSheet.kt @@ -10,7 +10,7 @@ import com.denizd.qwark.databinding.ConfirmationDialogBinding import com.denizd.qwark.viewmodel.ConfirmDeletionViewModel import com.google.android.material.bottomsheet.BottomSheetDialogFragment -class ConfirmDeletionBottomSheet() : BottomSheetDialogFragment() { +class ConfirmDeletionSheet() : BottomSheetDialogFragment() { constructor(text: String, confirmedAction: () -> Unit) : this() { this.text = text diff --git a/app/src/main/java/com/denizd/qwark/sheet/CopyCoursesBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/CopyCoursesSheet.kt similarity index 92% rename from app/src/main/java/com/denizd/qwark/sheet/CopyCoursesBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/CopyCoursesSheet.kt index 680b4c6..ee25e4a 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/CopyCoursesBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/CopyCoursesSheet.kt @@ -12,7 +12,7 @@ import com.denizd.qwark.fragment.SettingsFragment import com.denizd.qwark.model.SchoolYear import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class CopyCoursesBottomSheet : BottomSheetDialogFragment(), YearAdapter.YearClickListener { +class CopyCoursesSheet : BottomSheetDialogFragment(), YearAdapter.YearClickListener { private var _binding: RecyclerDialogBinding? = null private val binding: RecyclerDialogBinding get() = _binding!! @@ -41,7 +41,7 @@ internal class CopyCoursesBottomSheet : BottomSheetDialogFragment(), YearAdapter layoutManager = LinearLayoutManager(context) adapter = YearAdapter((settingsTargetFragment.getSchoolYears() ?: ArrayList()).filter { y -> y.yearId != settingsTargetFragment.getCurrentSchoolYearId() - }, this@CopyCoursesBottomSheet) + }, this@CopyCoursesSheet) scheduleLayoutAnimation() } } diff --git a/app/src/main/java/com/denizd/qwark/sheet/CourseCreateBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/CourseCreateSheet.kt similarity index 92% rename from app/src/main/java/com/denizd/qwark/sheet/CourseCreateBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/CourseCreateSheet.kt index d1d7537..6c2b6ce 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/CourseCreateBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/CourseCreateSheet.kt @@ -7,6 +7,7 @@ import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.FragmentActivity import com.denizd.qwark.R import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.databinding.CourseCreateDialogBinding @@ -15,7 +16,7 @@ import com.denizd.qwark.model.Course import com.denizd.qwark.model.CourseExam import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class CourseCreateBottomSheet : BottomSheetDialogFragment() { +class CourseCreateSheet : BottomSheetDialogFragment() { private var _binding: CourseCreateDialogBinding? = null private val binding: CourseCreateDialogBinding get() = _binding!! @@ -25,7 +26,7 @@ internal class CourseCreateBottomSheet : BottomSheetDialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (arguments?.size() ?: 0 != 0) course = QwarkUtil.getCourseFromBundle(arguments) + if (arguments?.size() ?: 0 != 0) course = (targetFragment as CourseFragment).getCourse(arguments?.getInt("courseId") ?: -1) // QwarkUtil.getCourseFromBundle(arguments) } override fun onAttach(context: Context) { @@ -121,17 +122,17 @@ internal class CourseCreateBottomSheet : BottomSheetDialogFragment() { _binding = null } - private fun openIconBottomSheet() = fragmentManager?.let { fm -> - val sheet = IconPickerBottomSheet().apply { + private fun openIconBottomSheet() { + val sheet = IconPickerSheet().apply { arguments = Bundle(1).apply { putString("currentIcon", icon) } } sheet.setTargetFragment(this, 42) - sheet.show(fm, sheet.tag) + sheet.show((context as FragmentActivity).supportFragmentManager, sheet.tag) } - internal fun setIcon(icon: String) { + fun setIcon(icon: String) { binding.imageView.setImageResource(QwarkUtil.getDrawableIntForString(icon)) this.icon = icon } diff --git a/app/src/main/java/com/denizd/qwark/sheet/CourseOptionsBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/CourseOptionsSheet.kt similarity index 77% rename from app/src/main/java/com/denizd/qwark/sheet/CourseOptionsBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/CourseOptionsSheet.kt index 2e184c8..dec5167 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/CourseOptionsBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/CourseOptionsSheet.kt @@ -8,21 +8,20 @@ import android.view.ViewGroup import com.denizd.qwark.R import com.denizd.qwark.databinding.CourseOptionsDialogBinding import com.denizd.qwark.fragment.CourseFragment -import com.denizd.qwark.model.Course import com.denizd.qwark.model.CourseExam -import com.denizd.qwark.util.QwarkUtil +import com.denizd.qwark.util.asCourse import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class CourseOptionsBottomSheet : BottomSheetDialogFragment() { +class CourseOptionsSheet : BottomSheetDialogFragment() { private var _binding: CourseOptionsDialogBinding? = null private val binding: CourseOptionsDialogBinding get() = _binding!! private lateinit var mContext: Context - private lateinit var course: CourseExam + private lateinit var courseExam: CourseExam override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - course = QwarkUtil.getCourseFromBundle(arguments) + courseExam = (targetFragment as CourseFragment).getCourse(arguments?.getInt("courseId") ?: -1) } override fun onAttach(context: Context) { @@ -40,18 +39,18 @@ internal class CourseOptionsBottomSheet : BottomSheetDialogFragment() { val targetFragment = targetFragment as CourseFragment - binding.title.text = getString(R.string.options_for_course, course.name) + binding.title.text = getString(R.string.options_for_course, courseExam.name) binding.viewHistoryButton.setOnClickListener { - targetFragment.createHistoryDialog(course.courseId, course.name) + targetFragment.createHistoryDialog(courseExam.courseId, courseExam.name) dismiss() } binding.editCourseButton.setOnClickListener { - targetFragment.createCourseDialog(course) + targetFragment.createCourseDialog(courseExam) dismiss() } binding.deleteCourseButton.setOnClickListener { - targetFragment.deleteCourse(QwarkUtil.getCourseExamAsCourse(course)) + targetFragment.deleteCourse(courseExam.asCourse()) dismiss() } } diff --git a/app/src/main/java/com/denizd/qwark/sheet/FinalsCreateBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/FinalsCreateSheet.kt similarity index 75% rename from app/src/main/java/com/denizd/qwark/sheet/FinalsCreateBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/FinalsCreateSheet.kt index 5fe687b..338df72 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/FinalsCreateBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/FinalsCreateSheet.kt @@ -5,24 +5,24 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ArrayAdapter import com.denizd.qwark.R -import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.databinding.FinalGradeEditDialogBinding import com.denizd.qwark.fragment.FinalsFragment import com.denizd.qwark.model.FinalGrade import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class FinalsCreateBottomSheet : BottomSheetDialogFragment() { +class FinalsCreateSheet : BottomSheetDialogFragment() { private var _binding: FinalGradeEditDialogBinding? = null private val binding: FinalGradeEditDialogBinding get() = _binding!! private lateinit var mContext: Context private lateinit var finalGrade: FinalGrade + private lateinit var finalsFragment: FinalsFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - finalGrade = QwarkUtil.getFinalGradeFromBundle(arguments) + finalsFragment = targetFragment as FinalsFragment + finalGrade = finalsFragment.getFinalGrade(arguments?.getInt("finalGradeId") ?: -1) } override fun onAttach(context: Context) { @@ -38,20 +38,7 @@ internal class FinalsCreateBottomSheet : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val targetFragment = targetFragment as FinalsFragment - binding.courseEdittext.setText(finalGrade.name) - -// val gradeArray = ArrayAdapter.createFromResource(mContext, R.array.grades_points, R.layout.dropdown_item) -// binding.gradePicker.setAdapter(gradeArray) -// binding.gradePicker.setText( -// if (finalGrade.grade == "-1") { -// binding.gradePicker.adapter.getItem(0).toString() -// } else { -// QwarkUtil.getGradeWithLeadingZero(finalGrade.grade.toInt()) -// }, -// false -// ) binding.gradePicker.value = if (finalGrade.grade == "-1") 0 else finalGrade.grade.toInt() binding.cancelButton.setOnClickListener { @@ -71,7 +58,7 @@ internal class FinalsCreateBottomSheet : BottomSheetDialogFragment() { finalGradeId = finalGrade.finalGradeId, scoreProfileId = finalGrade.scoreProfileId ) - targetFragment.update(newFinalGrade) + finalsFragment.update(newFinalGrade) dismiss() } } diff --git a/app/src/main/java/com/denizd/qwark/sheet/FinalsLinkBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/FinalsLinkSheet.kt similarity index 74% rename from app/src/main/java/com/denizd/qwark/sheet/FinalsLinkBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/FinalsLinkSheet.kt index 870f978..ca5d4bb 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/FinalsLinkBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/FinalsLinkSheet.kt @@ -8,28 +8,28 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.denizd.qwark.R import com.denizd.qwark.adapter.CourseAdapter import com.denizd.qwark.adapter.YearAdapter -import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.databinding.RecyclerDialogBinding import com.denizd.qwark.fragment.FinalsFragment -import com.denizd.qwark.model.Course import com.denizd.qwark.model.CourseExam import com.denizd.qwark.model.FinalGrade import com.denizd.qwark.model.SchoolYear +import com.denizd.qwark.util.getSorted import com.google.android.material.bottomsheet.BottomSheetDialogFragment import java.math.BigDecimal import java.math.RoundingMode -internal class FinalsLinkBottomSheet : BottomSheetDialogFragment(), YearAdapter.YearClickListener, CourseAdapter.CourseClickListener { +class FinalsLinkSheet : BottomSheetDialogFragment(), YearAdapter.YearClickListener, CourseAdapter.CourseClickListener { private lateinit var finalGrade: FinalGrade private lateinit var binding: RecyclerDialogBinding private var advanced = false private var isSelectingCourse = false - private lateinit var finalsTargetFragment: FinalsFragment + private lateinit var finalsFragment: FinalsFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - finalGrade = QwarkUtil.getFinalGradeFromBundle(arguments) + finalsFragment = targetFragment as FinalsFragment + finalGrade = finalsFragment.getFinalGrade(arguments?.getInt("finalGradeId") ?: -1) advanced = finalGrade.type == "adv" } @@ -41,7 +41,7 @@ internal class FinalsLinkBottomSheet : BottomSheetDialogFragment(), YearAdapter. override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - finalsTargetFragment = targetFragment as FinalsFragment + finalsFragment = targetFragment as FinalsFragment fillWithYears() } @@ -59,7 +59,7 @@ internal class FinalsLinkBottomSheet : BottomSheetDialogFragment(), YearAdapter. finalGradeId = finalGrade.finalGradeId, scoreProfileId = finalGrade.scoreProfileId ) - finalsTargetFragment.update(newFinalGrade) + finalsFragment.update(newFinalGrade) dismiss() } @@ -69,7 +69,7 @@ internal class FinalsLinkBottomSheet : BottomSheetDialogFragment(), YearAdapter. binding.title.text = getString(R.string.pick_a_year) binding.recyclerView.apply { layoutManager = LinearLayoutManager(context) - adapter = YearAdapter(finalsTargetFragment.getAllYears(), this@FinalsLinkBottomSheet) + adapter = YearAdapter(finalsFragment.getAllYears(), this@FinalsLinkSheet) scheduleLayoutAnimation() } isSelectingCourse = false @@ -77,14 +77,14 @@ internal class FinalsLinkBottomSheet : BottomSheetDialogFragment(), YearAdapter. private fun fillWithCourses(schoolYear: SchoolYear) { binding.title.text = getString(R.string.pick_a_course) - binding.recyclerView.adapter = - CourseAdapter( - QwarkUtil.getCoursesSorted( - finalsTargetFragment.getAllCourses().filter { c -> c.yearId == schoolYear.yearId && c.advanced == advanced }, - finalsTargetFragment.getCourseSortType() - ), - this, - finalsTargetFragment.getGradeType() + binding.recyclerView.adapter = CourseAdapter( + finalsFragment.getAllCourses().filter { c -> + c.yearId == schoolYear.yearId && c.advanced == advanced + }.getSorted( + finalsFragment.getCourseSortType() + ), + this, + finalsFragment.getGradeType() ) binding.recyclerView.scheduleLayoutAnimation() isSelectingCourse = true diff --git a/app/src/main/java/com/denizd/qwark/sheet/FinalsOptionsBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/FinalsOptionsSheet.kt similarity index 79% rename from app/src/main/java/com/denizd/qwark/sheet/FinalsOptionsBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/FinalsOptionsSheet.kt index 24b8484..3440933 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/FinalsOptionsBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/FinalsOptionsSheet.kt @@ -12,16 +12,18 @@ import com.denizd.qwark.model.FinalGrade import com.denizd.qwark.util.QwarkUtil import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class FinalsOptionsBottomSheet : BottomSheetDialogFragment() { +class FinalsOptionsSheet : BottomSheetDialogFragment() { private var _binding: FinalGradeOptionsDialogBinding? = null private val binding: FinalGradeOptionsDialogBinding get() = _binding!! private lateinit var mContext: Context private lateinit var finalGrade: FinalGrade + private lateinit var finalsFragment: FinalsFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - finalGrade = QwarkUtil.getFinalGradeFromBundle(arguments) + finalsFragment = targetFragment as FinalsFragment + finalGrade = finalsFragment.getFinalGrade(arguments?.getInt("finalGradeId") ?: -1) } override fun onAttach(context: Context) { @@ -36,30 +38,28 @@ internal class FinalsOptionsBottomSheet : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - - val targetFragment = targetFragment as FinalsFragment binding.title.text = getString(R.string.options_for_final_grade, if (finalGrade.name.isEmpty()) getString(R.string.final_grade) else finalGrade.name) if (finalGrade.type == "exam") binding.linkGradeButton.visibility = View.GONE if (finalGrade.courseId == -1) binding.viewLinkedCourseButton.visibility = View.GONE binding.editGradeButton.setOnClickListener { - targetFragment.createEditGradeSheet(finalGrade) + finalsFragment.createEditGradeSheet(finalGrade) dismiss() } binding.linkGradeButton.setOnClickListener { - targetFragment.createLinkGradeSheet(finalGrade) + finalsFragment.createLinkGradeSheet(finalGrade) dismiss() } binding.viewLinkedCourseButton.setOnClickListener { - targetFragment.viewLinkedCourse(finalGrade.courseId) + finalsFragment.viewLinkedCourse(finalGrade.courseId) dismiss() } binding.clearGradeButton.setOnClickListener { if (finalGrade.grade == "-1") { - targetFragment.clearFinalGradeError() + finalsFragment.clearFinalGradeError() } else { - targetFragment.clearFinalGrade(finalGrade) + finalsFragment.clearFinalGrade(finalGrade) } dismiss() } diff --git a/app/src/main/java/com/denizd/qwark/sheet/GradeCreateBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/GradeCreateSheet.kt similarity index 91% rename from app/src/main/java/com/denizd/qwark/sheet/GradeCreateBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/GradeCreateSheet.kt index 1be56df..ba4a19b 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/GradeCreateBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/GradeCreateSheet.kt @@ -5,10 +5,10 @@ import android.content.Context import android.os.Bundle import android.text.Editable import android.text.TextWatcher +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.LinearLayout import com.denizd.qwark.R import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.databinding.GradeCreateDialogBinding @@ -18,18 +18,24 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import java.text.ParseException import java.util.* -class GradeCreateBottomSheet : BottomSheetDialogFragment() { +class GradeCreateSheet : BottomSheetDialogFragment() { private var _binding: GradeCreateDialogBinding? = null private val binding: GradeCreateDialogBinding get() = _binding!! private lateinit var mContext: Context private lateinit var grade: Grade private var courseId: Int = 0 + private lateinit var gradeFragment: GradeFragment override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (arguments?.size() ?: 0 > 1) grade = QwarkUtil.getGradeFromBundle(arguments) - courseId = arguments?.getInt("courseId") ?: 0 + gradeFragment = targetFragment as GradeFragment + val gradeId = arguments?.getInt("gradeId") ?: -1 + if (gradeId == 0) { // 0 signifies no value has been set + courseId = arguments?.getInt("courseId") ?: -1 + } else { + grade = gradeFragment.getGrade(gradeId) + } } override fun onAttach(context: Context) { @@ -47,11 +53,9 @@ class GradeCreateBottomSheet : BottomSheetDialogFragment() { LayoutTransition().apply { setAnimateParentHierarchy(false) - (binding.root as LinearLayout).layoutTransition = this + binding.root.layoutTransition = this } - val targetFragment = targetFragment as GradeFragment - // initGradeDropdown() binding.verbalSwitch.setOnCheckedChangeListener { switch, isChecked -> @@ -79,7 +83,7 @@ class GradeCreateBottomSheet : BottomSheetDialogFragment() { } } - binding.gradePicker.displayedValues = QwarkUtil.getGradeArray(targetFragment.getGradeType()) + binding.gradePicker.displayedValues = QwarkUtil.getGradeArray(gradeFragment.getGradeType()) binding.examSwitch.setOnCheckedChangeListener { _, isChecked -> setGradePickerVisibility(isChecked) @@ -119,9 +123,9 @@ class GradeCreateBottomSheet : BottomSheetDialogFragment() { examTime = if (binding.examSwitch.isChecked) examDate else -1L ) if (::grade.isInitialized) { - targetFragment.update(newGrade) + gradeFragment.update(newGrade) } else { - targetFragment.insert(newGrade) + gradeFragment.insert(newGrade) } dismiss() } catch (e: ParseException) { diff --git a/app/src/main/java/com/denizd/qwark/sheet/HistoricalAverageBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/HistoricalAverageSheet.kt similarity index 95% rename from app/src/main/java/com/denizd/qwark/sheet/HistoricalAverageBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/HistoricalAverageSheet.kt index 077cae6..3682e7e 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/HistoricalAverageBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/HistoricalAverageSheet.kt @@ -12,7 +12,7 @@ import com.denizd.qwark.databinding.RecyclerDialogBinding import com.denizd.qwark.fragment.CourseFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class HistoricalAverageBottomSheet : BottomSheetDialogFragment() { +class HistoricalAverageSheet : BottomSheetDialogFragment() { private var _binding: RecyclerDialogBinding? = null private val binding: RecyclerDialogBinding get() = _binding!! diff --git a/app/src/main/java/com/denizd/qwark/sheet/IconPickerBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/IconPickerSheet.kt similarity index 94% rename from app/src/main/java/com/denizd/qwark/sheet/IconPickerBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/IconPickerSheet.kt index 0e10b30..2b38af8 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/IconPickerBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/IconPickerSheet.kt @@ -12,7 +12,7 @@ import com.denizd.qwark.databinding.IconDialogBinding import com.denizd.qwark.model.CourseIcon import com.google.android.material.bottomsheet.BottomSheetDialogFragment -class IconPickerBottomSheet : BottomSheetDialogFragment(), +class IconPickerSheet : BottomSheetDialogFragment(), IconAdapter.IconClickListener { private var _binding: IconDialogBinding? = null @@ -39,7 +39,7 @@ class IconPickerBottomSheet : BottomSheetDialogFragment(), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val targetFragment = targetFragment as CourseCreateBottomSheet + val targetFragment = targetFragment as CourseCreateSheet val icons = QwarkUtil.drawablesList iconAdapter = IconAdapter(icons, this) diff --git a/app/src/main/java/com/denizd/qwark/sheet/NoteCreateBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/NoteCreateSheet.kt similarity index 94% rename from app/src/main/java/com/denizd/qwark/sheet/NoteCreateBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/NoteCreateSheet.kt index 00114b2..c5ce9ac 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/NoteCreateBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/NoteCreateSheet.kt @@ -13,7 +13,7 @@ import com.denizd.qwark.model.Note import com.denizd.qwark.util.QwarkUtil import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class NoteCreateBottomSheet : BottomSheetDialogFragment() { +class NoteCreateSheet : BottomSheetDialogFragment() { private var _binding: NoteCreateDialogBinding? = null private val binding: NoteCreateDialogBinding get() = _binding!! @@ -22,7 +22,7 @@ internal class NoteCreateBottomSheet : BottomSheetDialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (arguments?.size() ?: 0 != 0) note = QwarkUtil.getNoteFromBundle(arguments) + if (arguments?.size() ?: 0 != 0) note = (targetFragment as NoteFragment).getNote(arguments?.getInt("noteId") ?: -1) } override fun onAttach(context: Context) { diff --git a/app/src/main/java/com/denizd/qwark/sheet/NoteDisplayBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/NoteDisplaySheet.kt similarity index 71% rename from app/src/main/java/com/denizd/qwark/sheet/NoteDisplayBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/NoteDisplaySheet.kt index 6a059af..f508f65 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/NoteDisplayBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/NoteDisplaySheet.kt @@ -8,10 +8,11 @@ import android.view.ViewGroup import com.denizd.qwark.R import com.denizd.qwark.util.QwarkUtil import com.denizd.qwark.databinding.NoteBottomSheetBinding +import com.denizd.qwark.fragment.NoteFragment import com.denizd.qwark.model.Note import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class NoteDisplayBottomSheet : BottomSheetDialogFragment() { +class NoteDisplaySheet : BottomSheetDialogFragment() { private var _binding: NoteBottomSheetBinding? = null private val binding: NoteBottomSheetBinding get() = _binding!! @@ -20,7 +21,7 @@ internal class NoteDisplayBottomSheet : BottomSheetDialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - note = QwarkUtil.getNoteFromBundle(arguments) + note = (targetFragment as NoteFragment).getNote(arguments?.getInt("noteId") ?: -1) } override fun onAttach(context: Context) { @@ -33,18 +34,6 @@ internal class NoteDisplayBottomSheet : BottomSheetDialogFragment() { return binding.root } -// override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { -// return super.onCreateDialog(savedInstanceState).also { dialog -> -// dialog.setOnShowListener { -// BottomSheetBehavior.from(dialog.findViewById( -// com.google.android.material.R.id.design_bottom_sheet -// )).apply { -// state = BottomSheetBehavior.STATE_EXPANDED -// } -// } -// } -// } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/com/denizd/qwark/sheet/NoteOptionsBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/NoteOptionsSheet.kt similarity index 94% rename from app/src/main/java/com/denizd/qwark/sheet/NoteOptionsBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/NoteOptionsSheet.kt index 2b4e122..44a11ad 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/NoteOptionsBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/NoteOptionsSheet.kt @@ -12,7 +12,7 @@ import com.denizd.qwark.model.Note import com.denizd.qwark.util.QwarkUtil import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class NoteOptionsBottomSheet : BottomSheetDialogFragment() { +class NoteOptionsSheet : BottomSheetDialogFragment() { private var _binding: NoteOptionsDialogBinding? = null private val binding: NoteOptionsDialogBinding get() = _binding!! @@ -21,7 +21,7 @@ internal class NoteOptionsBottomSheet : BottomSheetDialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - note = QwarkUtil.getNoteFromBundle(arguments) + note = (targetFragment as NoteFragment).getNote(arguments?.getInt("noteId") ?: -1) } override fun onAttach(context: Context) { diff --git a/app/src/main/java/com/denizd/qwark/sheet/ParticipationLinkBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/ParticipationLinkSheet.kt similarity index 93% rename from app/src/main/java/com/denizd/qwark/sheet/ParticipationLinkBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/ParticipationLinkSheet.kt index 091b6a4..9c913ff 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/ParticipationLinkBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/ParticipationLinkSheet.kt @@ -12,7 +12,7 @@ import com.denizd.qwark.fragment.ParticipationFragment import com.denizd.qwark.model.* import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal class ParticipationLinkBottomSheet : BottomSheetDialogFragment(), CourseAdapter.CourseClickListener { +class ParticipationLinkSheet : BottomSheetDialogFragment(), CourseAdapter.CourseClickListener { private lateinit var finalGrade: FinalGrade private lateinit var binding: RecyclerDialogBinding @@ -58,7 +58,7 @@ internal class ParticipationLinkBottomSheet : BottomSheetDialogFragment(), Cours 0 ) }, - this@ParticipationLinkBottomSheet, + this@ParticipationLinkSheet, null ) layoutManager = LinearLayoutManager(context) diff --git a/app/src/main/java/com/denizd/qwark/sheet/ScoreProfileCreateBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/ScoreProfileCreateSheet.kt similarity index 95% rename from app/src/main/java/com/denizd/qwark/sheet/ScoreProfileCreateBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/ScoreProfileCreateSheet.kt index cb81ca1..7104410 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/ScoreProfileCreateBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/ScoreProfileCreateSheet.kt @@ -5,7 +5,7 @@ import android.view.View import com.denizd.qwark.R import com.denizd.qwark.fragment.SettingsFragment -internal class ScoreProfileCreateBottomSheet : TextInputBottomSheet() { +class ScoreProfileCreateSheet : TextInputSheet() { private lateinit var settingsFragment: SettingsFragment private var currentScoreProfile: String = "" diff --git a/app/src/main/java/com/denizd/qwark/sheet/TextInputBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/TextInputSheet.kt similarity index 94% rename from app/src/main/java/com/denizd/qwark/sheet/TextInputBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/TextInputSheet.kt index cab722c..47e1203 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/TextInputBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/TextInputSheet.kt @@ -8,7 +8,7 @@ import android.view.ViewGroup import com.denizd.qwark.databinding.TextInputSheetBinding import com.google.android.material.bottomsheet.BottomSheetDialogFragment -internal open class TextInputBottomSheet : BottomSheetDialogFragment() { +open class TextInputSheet : BottomSheetDialogFragment() { protected var _binding: TextInputSheetBinding? = null protected val binding: TextInputSheetBinding get() = _binding!! diff --git a/app/src/main/java/com/denizd/qwark/sheet/YearCreateBottomSheet.kt b/app/src/main/java/com/denizd/qwark/sheet/YearCreateSheet.kt similarity index 96% rename from app/src/main/java/com/denizd/qwark/sheet/YearCreateBottomSheet.kt rename to app/src/main/java/com/denizd/qwark/sheet/YearCreateSheet.kt index bb7bf34..b17354e 100644 --- a/app/src/main/java/com/denizd/qwark/sheet/YearCreateBottomSheet.kt +++ b/app/src/main/java/com/denizd/qwark/sheet/YearCreateSheet.kt @@ -6,7 +6,7 @@ import com.denizd.qwark.R import com.denizd.qwark.fragment.SettingsFragment import com.denizd.qwark.model.SchoolYear -internal class YearCreateBottomSheet : TextInputBottomSheet() { +class YearCreateSheet : TextInputSheet() { private lateinit var settingsFragment: SettingsFragment private var currentYear: String = "" diff --git a/app/src/main/java/com/denizd/qwark/util/CourseFunctions.kt b/app/src/main/java/com/denizd/qwark/util/CourseFunctions.kt new file mode 100644 index 0000000..b9735e1 --- /dev/null +++ b/app/src/main/java/com/denizd/qwark/util/CourseFunctions.kt @@ -0,0 +1,28 @@ +package com.denizd.qwark.util +import com.denizd.qwark.model.Course +import com.denizd.qwark.model.CourseExam + +fun List.getSorted(sortType: Int): List = when (sortType) { // TODO check what ascending and descending really mean lol + QwarkUtil.SORT_COURSES_TIME_ASC -> this.asReversed() + QwarkUtil.SORT_COURSES_NAME_ASC -> this.sortedBy { c -> c.name } + QwarkUtil.SORT_COURSES_NAME_DESC -> this.sortedByDescending { c -> c.name } + QwarkUtil.SORT_COURSES_ADV -> this.sortedByDescending { c -> c.advanced } + QwarkUtil.SORT_COURSES_BASIC -> this.sortedBy { c -> c.advanced } + QwarkUtil.SORT_COURSES_AVG_ASC -> this.sortedBy { c -> c.average.toDouble() } + QwarkUtil.SORT_COURSES_AVG_DESC -> this.sortedByDescending { c -> c.average.toDouble() } + QwarkUtil.SORT_COURSES_NEXT_EXAM -> this.sortedBy { c -> if (c.examTime > 1L) c.examTime else Long.MAX_VALUE } + else -> this // TIME_DESC +} + +fun CourseExam.asCourse(): Course = Course( + name = name, + advanced = advanced, + icon = icon, + colour = colour, + average = average, + oralWeighting = oralWeighting, + gradeCount = gradeCount, + time = time, + courseId = courseId, + yearId = yearId +) \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/util/GradeCalculations.kt b/app/src/main/java/com/denizd/qwark/util/GradeFunctions.kt similarity index 100% rename from app/src/main/java/com/denizd/qwark/util/GradeCalculations.kt rename to app/src/main/java/com/denizd/qwark/util/GradeFunctions.kt diff --git a/app/src/main/java/com/denizd/qwark/util/OnBackPressed.kt b/app/src/main/java/com/denizd/qwark/util/OnBackPressed.kt index 47d5841..de410c3 100644 --- a/app/src/main/java/com/denizd/qwark/util/OnBackPressed.kt +++ b/app/src/main/java/com/denizd/qwark/util/OnBackPressed.kt @@ -1,5 +1,5 @@ package com.denizd.qwark.util -internal interface OnBackPressed { +interface OnBackPressed { fun onBackPressed(): Boolean } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/util/QwarkPreferences.kt b/app/src/main/java/com/denizd/qwark/util/QwarkPreferences.kt index abcfa45..773f8d7 100644 --- a/app/src/main/java/com/denizd/qwark/util/QwarkPreferences.kt +++ b/app/src/main/java/com/denizd/qwark/util/QwarkPreferences.kt @@ -4,14 +4,14 @@ import android.content.Context import android.content.SharedPreferences import androidx.preference.PreferenceManager -internal class QwarkPreferences private constructor(context: Context) { +class QwarkPreferences private constructor(context: Context) { private val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) private val edit: SharedPreferences.Editor = prefs.edit() companion object { private var qwarkPrefs: QwarkPreferences? = null - internal fun getPrefs(context: Context): QwarkPreferences { + fun getPrefs(context: Context): QwarkPreferences { if (qwarkPrefs == null) { synchronized (QwarkPreferences::class) { qwarkPrefs = QwarkPreferences(context) @@ -21,31 +21,31 @@ internal class QwarkPreferences private constructor(context: Context) { } } - internal fun getString(key: PreferenceKey, default: String = ""): String = prefs.getString(key.value, default) ?: default - internal fun getInt(key: PreferenceKey, default: Int = 0): Int = prefs.getInt(key.value, default) - internal fun getBool(key: PreferenceKey, default: Boolean = false): Boolean = prefs.getBoolean(key.value, default) + fun getString(key: PreferenceKey, default: String = ""): String = prefs.getString(key.value, default) ?: default + fun getInt(key: PreferenceKey, default: Int = 0): Int = prefs.getInt(key.value, default) + fun getBool(key: PreferenceKey, default: Boolean = false): Boolean = prefs.getBoolean(key.value, default) - internal fun putString(key: PreferenceKey, value: String): QwarkPreferences { + fun putString(key: PreferenceKey, value: String): QwarkPreferences { edit.putString(key.value, value).apply() return this } - internal fun putInt(key: PreferenceKey, value: Int): QwarkPreferences { + fun putInt(key: PreferenceKey, value: Int): QwarkPreferences { edit.putInt(key.value, value).apply() return this } - internal fun putBool(key: PreferenceKey, value: Boolean): QwarkPreferences { + fun putBool(key: PreferenceKey, value: Boolean): QwarkPreferences { edit.putBoolean(key.value, value).apply() return this } - internal fun getShowGradeAverage(): Boolean = getBool(PreferenceKey.SHOW_GRADE_AVERAGE) - internal fun getGradeType(): Int = getInt(PreferenceKey.GRADE_TYPE) - internal fun getCourseSortType(): Int = getInt(PreferenceKey.COURSE_SORT_TYPE, 1) - internal fun setCourseSortType(value: Int) { putInt(PreferenceKey.COURSE_SORT_TYPE, value) } - internal fun getSchoolYear(): Int = getInt(PreferenceKey.SCHOOL_YEAR_ID) - internal fun getSchoolYearName(): String = getString(PreferenceKey.SCHOOL_YEAR_NAME) - internal fun getScoreProfileName(): String = getString(PreferenceKey.SCORE_PROFILE_NAME) - internal fun getScoreProfileId(): Int = getInt(PreferenceKey.SCORE_PROFILE_ID) + fun getShowGradeAverage(): Boolean = getBool(PreferenceKey.SHOW_GRADE_AVERAGE) + fun getGradeType(): Int = getInt(PreferenceKey.GRADE_TYPE) + fun getCourseSortType(): Int = getInt(PreferenceKey.COURSE_SORT_TYPE, 1) + fun setCourseSortType(value: Int) { putInt(PreferenceKey.COURSE_SORT_TYPE, value) } + fun getSchoolYear(): Int = getInt(PreferenceKey.SCHOOL_YEAR_ID) + fun getSchoolYearName(): String = getString(PreferenceKey.SCHOOL_YEAR_NAME) + fun getScoreProfileName(): String = getString(PreferenceKey.SCORE_PROFILE_NAME) + fun getScoreProfileId(): Int = getInt(PreferenceKey.SCORE_PROFILE_ID) fun getParticipationDisplay(): Int = getInt(PreferenceKey.PARTICIPATION_DISPLAY) fun getParticipationDay(): Int = getInt(PreferenceKey.PARTICIPATION_DAY) diff --git a/app/src/main/java/com/denizd/qwark/util/QwarkUtil.kt b/app/src/main/java/com/denizd/qwark/util/QwarkUtil.kt index 87b3741..e3311b1 100644 --- a/app/src/main/java/com/denizd/qwark/util/QwarkUtil.kt +++ b/app/src/main/java/com/denizd/qwark/util/QwarkUtil.kt @@ -148,16 +148,12 @@ object QwarkUtil { else -> pointGradeArray } - private fun Double.getGradeType(map: Map): String = map[this.roundToInt()] ?: "" - fun getNewGradeType(grade: Int, type: Int): String = when (type) { GRADE_NUMBERED -> numberedGrades[grade] ?: "error" GRADE_LETTERED -> letteredGrades[grade] ?: "error" else -> "error" } - fun getNumberForLetter(grade: String): Int = lettersToPoints[grade] ?: -1 - val timeAtMidnight: Long = GregorianCalendar().apply { set(Calendar.HOUR_OF_DAY, 0) set(Calendar.MINUTE, 0) @@ -170,27 +166,15 @@ object QwarkUtil { const val GRADE_NUMBERED = 2 const val GRADE_LETTERED = 3 - private const val SORT_COURSES_TIME_ASC = 0 - private const val SORT_COURSES_TIME_DESC = 1 - private const val SORT_COURSES_NAME_ASC = 2 - private const val SORT_COURSES_NAME_DESC = 3 - private const val SORT_COURSES_ADV = 4 - private const val SORT_COURSES_BASIC = 5 - private const val SORT_COURSES_AVG_ASC = 6 - private const val SORT_COURSES_AVG_DESC = 7 - private const val SORT_COURSES_NEXT_EXAM = 8 - - fun getCoursesSorted(courses: List, sortType: Int): List = when (sortType) { // TODO check what ascending and descending really mean lol - SORT_COURSES_TIME_ASC -> courses.asReversed() - SORT_COURSES_TIME_DESC -> courses - SORT_COURSES_NAME_ASC -> courses.sortedBy { c -> c.name } - SORT_COURSES_NAME_DESC -> courses.sortedByDescending { c -> c.name } - SORT_COURSES_ADV -> courses.sortedByDescending { c -> c.advanced } - SORT_COURSES_BASIC -> courses.sortedBy { c -> c.advanced } - SORT_COURSES_AVG_ASC -> courses.sortedBy { c -> c.average.toDouble() } - SORT_COURSES_AVG_DESC -> courses.sortedByDescending { c -> c.average.toDouble() } - else -> courses.sortedBy { c -> if (c.examTime > 1L) c.examTime else Long.MAX_VALUE } // NEXT_EXAM - } + const val SORT_COURSES_TIME_ASC = 0 + const val SORT_COURSES_TIME_DESC = 1 + const val SORT_COURSES_NAME_ASC = 2 + const val SORT_COURSES_NAME_DESC = 3 + const val SORT_COURSES_ADV = 4 + const val SORT_COURSES_BASIC = 5 + const val SORT_COURSES_AVG_ASC = 6 + const val SORT_COURSES_AVG_DESC = 7 + const val SORT_COURSES_NEXT_EXAM = 8 fun getGradeAsString(grade: Int, leadingZero: Boolean): String = (if (leadingZero && grade < 10) "0" else "") + grade fun getGradeWithLeadingZero(grade: Int) = "${if (grade < 10) "0" else ""}$grade" @@ -227,115 +211,4 @@ object QwarkUtil { } dialog.show() } - - fun putCourseInBundle(fragment: Fragment, course: CourseExam) { - val bundle = Bundle(11).apply { - putString("name", course.name) - putBoolean("advanced", course.advanced) - putString("icon", course.icon) - putString("colour", course.colour) - putString("average", course.average) - putInt("oralWeighting", course.oralWeighting) - putInt("gradeCount", course.gradeCount) - putLong("time", course.time) - putInt("courseId", course.courseId) - putInt("yearId", course.yearId) - putLong("examTime", course.examTime) - } - fragment.arguments = bundle - } - - fun getCourseFromBundle(bundle: Bundle?) = CourseExam( - name = bundle?.getString("name") ?: "", - advanced = bundle?.getBoolean("advanced") ?: false, - icon = bundle?.getString("icon") ?: "", - colour = bundle?.getString("colour") ?: "", - average = bundle?.getString("average") ?: "", - oralWeighting = bundle?.getInt("oralWeighting") ?: 0, - gradeCount = bundle?.getInt("gradeCount") ?: 0, - time = bundle?.getLong("time") ?: 0L, - courseId = bundle?.getInt("courseId") ?: 0, - yearId = bundle?.getInt("yearId") ?: 0, - examTime = bundle?.getLong("examTime") ?: 0L - ) - - fun putFinalGradeInBundle(fragment: Fragment, finalGrade: FinalGrade) { - val bundle = Bundle(7).apply { - putString("name", finalGrade.name) - putInt("courseId", finalGrade.courseId) - putString("grade", finalGrade.grade) - putString("type", finalGrade.type) - putString("note", finalGrade.note) - putInt("finalGradeId", finalGrade.finalGradeId) - putInt("scoreProfileId", finalGrade.scoreProfileId) - } - fragment.arguments = bundle - } - - fun getFinalGradeFromBundle(bundle: Bundle?) = FinalGrade( - name = bundle?.getString("name") ?: "", - courseId = bundle?.getInt("courseId") ?: 0, - grade = bundle?.getString("grade") ?: "", - type = bundle?.getString("type") ?: "", - note = bundle?.getString("note") ?: "", - finalGradeId = bundle?.getInt("finalGradeId") ?: 0, - scoreProfileId = bundle?.getInt("scoreProfileId") ?: 0 - ) - - fun putGradeInBundle(fragment: Fragment, grade: Grade) { - val bundle = Bundle(8).apply { - putInt("grade", grade.grade) - putString("note", grade.note) - putBoolean("verbal", grade.verbal) - putLong("time", grade.time) - putInt("weighting", grade.weighting) - putLong("examTime", grade.examTime) - putInt("gradeId", grade.gradeId) - putInt("courseId", grade.courseId) - } - fragment.arguments = bundle - } - - fun getGradeFromBundle(bundle: Bundle?) = Grade( - grade = bundle?.getInt("grade") ?: 0, - note = bundle?.getString("note") ?: "", - verbal = bundle?.getBoolean("verbal") ?: false, - time = bundle?.getLong("time") ?: 0L, - weighting = bundle?.getInt("weighting") ?: 0, - examTime = bundle?.getLong("examTime") ?: 0L, - gradeId = bundle?.getInt("gradeId") ?: 0, - courseId = bundle?.getInt("courseId") ?: 0 - ) - - fun putNoteInBundle(fragment: Fragment, note: Note) { - val bundle = Bundle(5).apply { - putString("content", note.content) - putBoolean("dismissed", note.dismissed) - putLong("time", note.time) - putString("category", note.category) - putInt("noteId", note.noteId) - } - fragment.arguments = bundle - } - - fun getNoteFromBundle(bundle: Bundle?) = Note( - content = bundle?.getString("content") ?: "", - dismissed = bundle?.getBoolean("dismissed") ?: false, - time = bundle?.getLong("time") ?: 0L, - category = bundle?.getString("category") ?: "", - noteId = bundle?.getInt("noteId") ?: 0 - ) - - fun getCourseExamAsCourse(c: CourseExam): Course = Course( - name = c.name, - advanced = c.advanced, - icon = c.icon, - colour = c.colour, - average = c.average, - oralWeighting = c.oralWeighting, - gradeCount = c.gradeCount, - time = c.time, - courseId = c.courseId, - yearId = c.yearId - ) } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/viewmodel/CourseViewModel.kt b/app/src/main/java/com/denizd/qwark/viewmodel/CourseViewModel.kt index 3f0df70..3fac0fc 100644 --- a/app/src/main/java/com/denizd/qwark/viewmodel/CourseViewModel.kt +++ b/app/src/main/java/com/denizd/qwark/viewmodel/CourseViewModel.kt @@ -29,4 +29,5 @@ class CourseViewModel(application: Application) : QwarkViewModel(application) { fun insert(course: Course) = doAsync { repo.insert(course) } fun update(course: Course) = doAsync { repo.update(course) } fun delete(course: Course) = doAsync { repo.delete(course) } + fun getCourse(courseId: Int): CourseExam = returnBlocking { repo.getCourse(courseId) } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/viewmodel/FinalsViewModel.kt b/app/src/main/java/com/denizd/qwark/viewmodel/FinalsViewModel.kt index 6dcad27..7eeaecc 100644 --- a/app/src/main/java/com/denizd/qwark/viewmodel/FinalsViewModel.kt +++ b/app/src/main/java/com/denizd/qwark/viewmodel/FinalsViewModel.kt @@ -14,7 +14,7 @@ import java.lang.NumberFormatException class FinalsViewModel(app: Application) : QwarkViewModel(app) { private val repo = FinalsRepository(app) - val allFinalGrades: LiveData>? = repo.getFinalGrades(repo.getFinalScoreId()) + val allFinalGrades: LiveData> = repo.getFinalGrades(repo.getFinalScoreId()) fun update(finalGrade: FinalGrade) = viewModelScope.launch { withContext(Dispatchers.IO) { @@ -53,7 +53,7 @@ class FinalsViewModel(app: Application) : QwarkViewModel(app) { private fun checkGrade(finalGrade: FinalGrade): Int = if (finalGrade.grade.toInt() > -1) finalGrade.grade.toInt() else throw NumberFormatException() - fun getFinalGrade(points: Int): Double = when (points) { + fun getFinalGradeScore(points: Int): Double = when (points) { in 823..900 -> 1.0 in 805..822 -> 1.1 in 787..804 -> 1.2 @@ -107,11 +107,7 @@ class FinalsViewModel(app: Application) : QwarkViewModel(app) { } } - fun getCourse(courseId: Int) = runBlocking { - withContext(Dispatchers.IO) { - repo.getCourse(courseId) - } - } - + fun getCourse(courseId: Int) = returnBlocking { repo.getCourse(courseId) } + fun getFinalGrade(finalGradeId: Int) = returnBlocking { repo.getFinalGrade(finalGradeId) } fun getCourseSortType() = repo.getCourseSortType() } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/viewmodel/GradeViewModel.kt b/app/src/main/java/com/denizd/qwark/viewmodel/GradeViewModel.kt index f6fc4ec..9e4292e 100644 --- a/app/src/main/java/com/denizd/qwark/viewmodel/GradeViewModel.kt +++ b/app/src/main/java/com/denizd/qwark/viewmodel/GradeViewModel.kt @@ -25,4 +25,5 @@ class GradeViewModel(application: Application) : QwarkViewModel(application) { fun delete(gradeId: Int) = doAsync { repo.delete(gradeId) } fun insert(avg: HistoricalAvg) = doAsync { repo.insert(avg) } + fun getGrade(gradeId: Int) = returnBlocking { repo.getGrade(gradeId) } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/viewmodel/NoteViewModel.kt b/app/src/main/java/com/denizd/qwark/viewmodel/NoteViewModel.kt index 7a9b450..87a23c5 100644 --- a/app/src/main/java/com/denizd/qwark/viewmodel/NoteViewModel.kt +++ b/app/src/main/java/com/denizd/qwark/viewmodel/NoteViewModel.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext -class NoteViewModel(application: Application) : AndroidViewModel(application) { +class NoteViewModel(application: Application) : QwarkViewModel(application) { private val repo = NoteRepository(application) private val reloadTrigger = MutableLiveData() @@ -75,4 +75,6 @@ class NoteViewModel(application: Application) : AndroidViewModel(application) { repo.getAllCategories() } } + + fun getNote(noteId: Int) = returnBlocking { repo.getNote(noteId) } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/qwark/viewmodel/ParticipationCourseViewModel.kt b/app/src/main/java/com/denizd/qwark/viewmodel/ParticipationCourseViewModel.kt index 80716e3..e0179ff 100644 --- a/app/src/main/java/com/denizd/qwark/viewmodel/ParticipationCourseViewModel.kt +++ b/app/src/main/java/com/denizd/qwark/viewmodel/ParticipationCourseViewModel.kt @@ -13,7 +13,12 @@ class ParticipationCourseViewModel(app: Application) : QwarkViewModel(app) { repo.getAllParticipationsForCourse(courseId) } fun getParticipationCount(participations: List) = repo.getParticipationCount(participations) - fun updateParticipation(participation: String, courseId: Int) = doAsync { repo.updateParticipation(participation, courseId) } + fun updateParticipation(participation: String, courseId: Int) = doAsync { + repo.updateParticipation(participation, courseId) + } + fun updateParticipation(timesHandRaised: Int, timesSpoken: Int, participationId: Int) = doAsync { + repo.updateParticipation(timesHandRaised, timesSpoken, participationId) + } fun createParticipation(timesHandRaised: Int, timesSpoken: Int, time: Long, courseId: Int) = doAsync { repo.insert(timesHandRaised, timesSpoken, time, courseId) } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9a94ad8..5c0603e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -64,7 +64,7 @@ android:layout_height="match_parent"> diff --git a/app/src/main/res/layout/final_grade_options_dialog.xml b/app/src/main/res/layout/final_grade_options_dialog.xml index 3242eae..937ab69 100644 --- a/app/src/main/res/layout/final_grade_options_dialog.xml +++ b/app/src/main/res/layout/final_grade_options_dialog.xml @@ -4,7 +4,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:backgroundTint="@color/colorBackground" - android:paddingTop="8dp" android:paddingBottom="8dp"> Klausurdatum (yyyy-mm-dd) Dieses Datum kann nicht verarbeitet werden Vergangene Klausuren müssen benotet werden + Beteiligung einsehen Notizen @@ -104,8 +105,12 @@ Gemeldet : Gesprochen Bist du dir sicher, dass du diese Beteiligung löschen möchtest? Klassenzimmermodus + Klassenzimmermodus (fortgesetzt) Lange drücken um abzubrechen Lange drücken um zu beenden + Kurs einsehen + Beteiligung zu alt, um fortgesetzt zu werden + " (fortsetzbar)" Montag diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4978376..1fa9041 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -133,7 +133,7 @@ Exam date (yyyy-mm-dd) This date can\'t be parsed Passed exams must have a grade associated - Open participation + View participation Notes @@ -163,9 +163,12 @@ Hand raised : Spoken Are you sure you want to delete this participation? Class Session + Class Session (resumed) Long-press to cancel Long-press to finish - Open course + View course + Participation too old to be resumed + " (resumable)" Monday