From fb50711d36c32bd3775e9a8b1f4cb114a27ce3fe Mon Sep 17 00:00:00 2001 From: denizk0461 Date: Thu, 13 Apr 2023 12:25:43 +0200 Subject: [PATCH] Changing fragments via bottom navigation view works well now! Also started work on SettingsFragment.kt --- .../studip/activity/MainActivity.kt | 78 +++++++++++++ .../studip/fragment/EventFragment.kt | 12 +- .../studip/fragment/FoodFragment.kt | 32 +++++ .../studip/fragment/SettingsFragment.kt | 68 +++++++++++ app/src/main/res/drawable/layout_ripple.xml | 12 ++ app/src/main/res/layout/activity_main.xml | 3 +- app/src/main/res/layout/content_main.xml | 6 +- app/src/main/res/layout/fragment_event.xml | 3 +- app/src/main/res/layout/fragment_food.xml | 7 ++ app/src/main/res/layout/fragment_settings.xml | 110 ++++++++++++++++++ app/src/main/res/values/strings.xml | 13 ++- app/src/main/res/values/themes.xml | 5 + 12 files changed, 338 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/denizk0461/studip/fragment/FoodFragment.kt create mode 100644 app/src/main/java/com/denizk0461/studip/fragment/SettingsFragment.kt create mode 100644 app/src/main/res/drawable/layout_ripple.xml create mode 100644 app/src/main/res/layout/fragment_food.xml create mode 100644 app/src/main/res/layout/fragment_settings.xml diff --git a/app/src/main/java/com/denizk0461/studip/activity/MainActivity.kt b/app/src/main/java/com/denizk0461/studip/activity/MainActivity.kt index d433e81..9aabf4d 100644 --- a/app/src/main/java/com/denizk0461/studip/activity/MainActivity.kt +++ b/app/src/main/java/com/denizk0461/studip/activity/MainActivity.kt @@ -1,6 +1,7 @@ package com.denizk0461.studip.activity import android.os.Bundle +import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowCompat import androidx.navigation.findNavController @@ -8,15 +9,23 @@ import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.navigateUp import android.view.Menu import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentTransaction +import androidx.lifecycle.Lifecycle import com.denizk0461.studip.R import com.denizk0461.studip.data.Dependencies import com.denizk0461.studip.databinding.ActivityMainBinding import com.denizk0461.studip.db.EventRepository +import com.denizk0461.studip.fragment.EventFragment +import com.denizk0461.studip.fragment.FoodFragment +import com.denizk0461.studip.fragment.SettingsFragment class MainActivity : AppCompatActivity() { private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var binding: ActivityMainBinding + private var currentFragment = FragmentType.SCHEDULE + private val fragments = listOf(EventFragment(), FoodFragment(), SettingsFragment()) override fun onCreate(savedInstanceState: Bundle?) { WindowCompat.setDecorFitsSystemWindows(window, false) @@ -27,6 +36,12 @@ class MainActivity : AppCompatActivity() { binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) + binding.contentMain.navView.setOnItemSelectedListener { item -> + loadFragment(bottomIdToType(item.itemId)) + } + + loadFragment(currentFragment) + // setSupportActionBar(binding.toolbar) // val navController = findNavController(R.id.nav_host_fragment_content_main) @@ -41,6 +56,36 @@ class MainActivity : AppCompatActivity() { // } } + private fun loadFragment(type: FragmentType): Boolean { +// val fragment = supportFragmentManager.findFragmentByTag(type.type) ?: getFragmentByType(type) + val fragment = getFragment(type) + + if (fragment.lifecycle.currentState != Lifecycle.State.INITIALIZED) { + return false + } + +// if (supportFragmentManager.fragments.size > 1) { +// +// val currentFragment = supportFragmentManager.findFragmentByTag(currentFragment.type) +// if (currentFragment != null) { +// supportFragmentManager.beginTransaction().remove(currentFragment).commit() +// supportFragmentManager.popBackStack() +// } +// } + +// supportFragmentManager.popBackStack() + supportFragmentManager.beginTransaction() + .replace(R.id.nav_host_fragment_content_main, fragment, type.type) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commit() + + binding.contentMain.appTitleBar.text = getTitleString(type) + + currentFragment = type + + return true + } + override fun onCreateOptionsMenu(menu: Menu): Boolean { // Inflate the menu; this adds items to the action bar if it is present. menuInflater.inflate(R.menu.menu_main, menu) @@ -62,4 +107,37 @@ class MainActivity : AppCompatActivity() { return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() } + + private fun getFragmentByType(type: FragmentType): Fragment { +// Log.d("AAA!", "help") + return when (type) { + FragmentType.SCHEDULE -> EventFragment() + FragmentType.FOOD -> FoodFragment() // TODO once this fragment has been implemented + FragmentType.SETTINGS -> SettingsFragment() + } + } + + private fun bottomIdToType(id: Int): FragmentType = when (id) { + R.id.food -> FragmentType.FOOD + R.id.settings -> FragmentType.SETTINGS + else -> FragmentType.SCHEDULE + } + + private fun getFragment(type: FragmentType) = when (type) { + FragmentType.SCHEDULE -> fragments[0] + FragmentType.FOOD -> fragments[1] + FragmentType.SETTINGS -> fragments[2] + } + + private fun getTitleString(type: FragmentType) = when (type) { + FragmentType.SCHEDULE -> getString(R.string.title_schedule) + FragmentType.FOOD -> getString(R.string.title_food) + FragmentType.SETTINGS -> getString(R.string.title_settings) + } + + enum class FragmentType(val type: String) { + SCHEDULE("schedule"), + FOOD("food"), + SETTINGS("settings"), + } } \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/fragment/EventFragment.kt b/app/src/main/java/com/denizk0461/studip/fragment/EventFragment.kt index 04bc924..c4499a1 100644 --- a/app/src/main/java/com/denizk0461/studip/fragment/EventFragment.kt +++ b/app/src/main/java/com/denizk0461/studip/fragment/EventFragment.kt @@ -85,10 +85,10 @@ class EventFragment : Fragment() { // } } -// override fun onResume() { -// super.onResume() -// switchToCurrentDayView() -// } + override fun onResume() { + super.onResume() + switchToCurrentDayView() + } override fun onDestroyView() { super.onDestroyView() @@ -96,8 +96,8 @@ class EventFragment : Fragment() { } private fun switchToCurrentDayView() { -// binding.viewpager.currentItem = dayOfWeek - binding.dayTabLayout.getTabAt(dayOfWeek)?.select() + binding.viewPager.currentItem = dayOfWeek +// binding.dayTabLayout.getTabAt(dayOfWeek)?.select() } private fun launchWebview() { diff --git a/app/src/main/java/com/denizk0461/studip/fragment/FoodFragment.kt b/app/src/main/java/com/denizk0461/studip/fragment/FoodFragment.kt new file mode 100644 index 0000000..af44559 --- /dev/null +++ b/app/src/main/java/com/denizk0461/studip/fragment/FoodFragment.kt @@ -0,0 +1,32 @@ +package com.denizk0461.studip.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.denizk0461.studip.databinding.FragmentFoodBinding + +class FoodFragment : Fragment() { + + private var _binding: FragmentFoodBinding? = null + + // This property is only valid between onCreateView and + // onDestroyView. + private val binding get() = _binding!! + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentFoodBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denizk0461/studip/fragment/SettingsFragment.kt b/app/src/main/java/com/denizk0461/studip/fragment/SettingsFragment.kt new file mode 100644 index 0000000..b707c35 --- /dev/null +++ b/app/src/main/java/com/denizk0461/studip/fragment/SettingsFragment.kt @@ -0,0 +1,68 @@ +package com.denizk0461.studip.fragment + +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.fragment.app.Fragment +import com.denizk0461.studip.BuildConfig +import com.denizk0461.studip.data.Misc +import com.denizk0461.studip.databinding.FragmentSettingsBinding + +class SettingsFragment : Fragment() { + + private var _binding: FragmentSettingsBinding? = null + // This property is only valid between onCreateView and + // onDestroyView. + private val binding get() = _binding!! + private var appVersionClick = 0 + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentSettingsBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val toast2 = Toast.makeText(context, "2", Toast.LENGTH_SHORT) + val toast22 = Toast.makeText(context, "22", Toast.LENGTH_SHORT) + val toast222 = Toast.makeText(context, "222", Toast.LENGTH_SHORT) + + binding.buttonAppVersion.setOnClickListener { + when (appVersionClick) { + 19 -> { + toast2.show() + appVersionClick += 1 + } + 20 -> { + toast2.cancel() + toast22.show() + appVersionClick += 1 + } + 21 -> { + toast22.cancel() + toast222.show() + appVersionClick += 1 + } + 22 -> { + toast222.cancel() + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(Misc.mysteryLink))) + appVersionClick = 0 + } + else -> appVersionClick += 1 + } + } + + binding.appVersionText.text = BuildConfig.VERSION_NAME + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/layout_ripple.xml b/app/src/main/res/drawable/layout_ripple.xml new file mode 100644 index 0000000..d3ea692 --- /dev/null +++ b/app/src/main/res/drawable/layout_ripple.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index badae32..b6c6cf3 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,6 +7,7 @@ android:fitsSystemWindows="true" tools:context=".activity.MainActivity"> - + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 3386b54..005c23d 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -15,9 +15,10 @@ app:layout_constraintEnd_toEndOf="parent"> - + tools:context=".fragment.EventFragment" + android:background="?android:colorBackground"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml new file mode 100644 index 0000000..829cf9c --- /dev/null +++ b/app/src/main/res/layout/fragment_settings.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 539cc5e..ab1187f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,7 +13,9 @@ THURSDAY FRIDAY - Your Schedule + Your Schedule + Canteen Plans + App Settings Schedule Food @@ -21,6 +23,15 @@ Your schedule has been refreshed! + General + Miscellaneous + + Show academic quarter + Where applicable + App Version + + with ♡️ from Osterholz\nMade by Deniz \\__* + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index d9fe8dd..58a8b49 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -18,4 +18,9 @@ + + \ No newline at end of file