diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 40be6f7..c9e9f08 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 4, - "versionName": "1.0.1", + "versionCode": 5, + "versionName": "1.0.2", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt index 88a45c6..ab48ed4 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/db/AppRepository.kt @@ -27,7 +27,7 @@ class AppRepository(app: Application) { private val blankDietaryPrefs: String = DietaryPreferences.TEMPLATE_EMPTY /** - * Used to observe just to register an update of the user-set dietary preferences. + * Used to observe whenever updates are made to the dietary preferences. */ val dietaryPreferencesUpdate: MutableLiveData = MutableLiveData(0) diff --git a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt index 30fa658..0e56406 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/fragment/CanteenFragment.kt @@ -1,16 +1,20 @@ package com.denizk0461.weserplaner.fragment +import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.PopupMenu import androidx.fragment.app.viewModels import com.denizk0461.weserplaner.R import com.denizk0461.weserplaner.adapter.CanteenOfferPageAdapter import com.denizk0461.weserplaner.data.getTextSheet +import com.denizk0461.weserplaner.data.getThemedColor import com.denizk0461.weserplaner.data.setRainbowProgressCircle import com.denizk0461.weserplaner.data.showErrorSnackBar +import com.denizk0461.weserplaner.data.showToast import com.denizk0461.weserplaner.databinding.FragmentCanteenBinding import com.denizk0461.weserplaner.model.* import com.denizk0461.weserplaner.viewmodel.CanteenViewModel @@ -60,13 +64,53 @@ class CanteenFragment : AppFragment() { R.string.title_canteen_template, getCurrentlySelectedCanteenName(), ) + + // Set the title to be selected so it scrolls (marquee) binding.appTitleBar.isSelected = true - binding.buttonNotifications.setOnClickListener { - openBottomSheet(getTextSheet( - getString(R.string.canteen_news_sheet_title), - contentId = TextSheetContentId.NEWS, - )) + // Set up observer for the selected canteen + viewModel.getCanteen().observe(viewLifecycleOwner) { canteen -> + if (canteen == null || canteen.news.isBlank()) { + // Set icon to show that no news are available + binding.buttonNotifications.icon = AppCompatResources.getDrawable( + context, + R.drawable.notifications_none, + ) + + // Apply default colour + binding.buttonNotifications.iconTint = ColorStateList.valueOf( + context.theme.getThemedColor( + R.attr.colorOnSurfaceVariant + ) + ) + + // Set up click listener to tell the user that no news are available + binding.buttonNotifications.setOnClickListener { + showToast(context, getString(R.string.text_sheet_news_empty)) + } + + } else { + // Set icon to show that news are available + binding.buttonNotifications.icon = AppCompatResources.getDrawable( + context, + R.drawable.notifications_active, + ) + + // Apply highlight colour + binding.buttonNotifications.iconTint = ColorStateList.valueOf( + context.theme.getThemedColor( + com.google.android.material.R.attr.colorPrimary + ) + ) + + // Set up click listener to show news sheet + binding.buttonNotifications.setOnClickListener { + openBottomSheet(getTextSheet( + getString(R.string.canteen_news_sheet_title), + contentId = TextSheetContentId.NEWS, + )) + } + } } // Assign a preference value to every button to filter for dietary preferences diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenPageViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenPageViewModel.kt index 65bf3a4..7431409 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenPageViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenPageViewModel.kt @@ -17,6 +17,9 @@ class CanteenPageViewModel(app: Application) : AppViewModel(app) { fun getOffersByDay(day: Int): LiveData> = repo.getOffersByDay(day) + /** + * Used to observe whenever updates are made to the dietary preferences. + */ val dietaryPreferencesUpdate: LiveData = repo.dietaryPreferencesUpdate /** diff --git a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt index d612e64..c69b3c4 100644 --- a/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt +++ b/app/src/main/java/com/denizk0461/weserplaner/viewmodel/CanteenViewModel.kt @@ -42,6 +42,16 @@ class CanteenViewModel(app: Application) : AppViewModel(app) { } } + /** + * Retrieves the canteen stored in the database. Should always be 0 or 1. + * + * @return canteen + */ + fun getCanteen(): LiveData = repo.getCanteen() + + /** + * Register that the user has made an update to their dietary preferences. + */ fun registerDietaryPreferencesUpdate() { repo.dietaryPreferencesUpdate.postValue(repo.dietaryPreferencesUpdate.value?.plus(1)) } diff --git a/app/src/main/res/drawable/notifications_active.xml b/app/src/main/res/drawable/notifications_active.xml new file mode 100644 index 0000000..50a772b --- /dev/null +++ b/app/src/main/res/drawable/notifications_active.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/notification.xml b/app/src/main/res/drawable/notifications_none.xml similarity index 51% rename from app/src/main/res/drawable/notification.xml rename to app/src/main/res/drawable/notifications_none.xml index 1d038a4..605362e 100644 --- a/app/src/main/res/drawable/notification.xml +++ b/app/src/main/res/drawable/notifications_none.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/layout/fragment_canteen.xml b/app/src/main/res/layout/fragment_canteen.xml index 68ddfc6..48d8637 100644 --- a/app/src/main/res/layout/fragment_canteen.xml +++ b/app/src/main/res/layout/fragment_canteen.xml @@ -49,7 +49,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="0dp" - app:icon="@drawable/notification" + app:icon="@drawable/notifications_none" app:iconPadding="0dp" app:layout_constraintTop_toTopOf="@id/app_title_bar" app:layout_constraintBottom_toBottomOf="@id/app_title_bar" diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 58962c9..2c36f39 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,7 +1,5 @@ - - @@ -11,7 +9,6 @@ - diff --git a/gradle.properties b/gradle.properties index f2b979f..a2e90d8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,5 +22,4 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true android.defaults.buildfeatures.buildconfig=true -android.nonFinalResIds=false -org.gradle.unsafe.configuration-cache=true \ No newline at end of file +android.nonFinalResIds=false \ No newline at end of file