From 4064abfb1d2f6d81498626965af5f95e58b76fd7 Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Wed, 20 Jul 2022 18:46:16 +0200 Subject: [PATCH] removed unused imports to fix the build (#1484) added base structure and first spinner version added rating structure added rating list items extended new rating layout added recycler views for tag ratings improved spacing and orientation of elements started add ing view fragment showing single ratings in listview colorful list rating items improved color scheme removed unnecessary ui elements added prove of concept camera ui simplification create rating prepared listitem in cafeteria overview moved cafeteria in shared fragment --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 351 +++++++++--------- .../tumui/feedback/FeedbackPresenter.kt | 1 + .../ui/cafeteria/CafeteriaMenuCard.kt | 2 +- .../ui/cafeteria/CafeteriaMenuViewHolder.kt | 18 +- .../CafeteriaDetailsSectionFragment.kt | 12 +- .../details/CafeteriaMenuAdapterItem.kt | 13 +- .../details/CafeteriaMenusAdapter.kt | 27 +- .../cafeteria/fragment/CafeteriaFragment.kt | 10 + .../rating/CreateCafeteriaRatingFragment.kt | 255 +++++++++++++ .../cafeteria/rating/CreateRatingAdapter.kt | 34 ++ .../rating/CreateTagRatingElement.kt | 10 + .../rating/ShowCafeteriaRatingsFragment.kt | 124 +++++++ .../ui/cafeteria/rating/ShowRatingAdapter.kt | 139 +++++++ .../ui/cafeteria/rating/ShowRatingAverage.kt | 9 + .../cafeteria/rating/ShowTagRatingAverage.kt | 11 + .../de/tum/in/tumcampusapp/database/TcaDb.kt | 60 ++- .../main/res/drawable/custom_ratingbar.xml | 25 ++ .../drawable/ic_baseline_photo_camera_24.xml | 6 + app/src/main/res/drawable/rating_circle.png | Bin 0 -> 670 bytes .../main/res/layout/cafeteria_tag_chip.xml | 17 + .../main/res/layout/card_price_line_big.xml | 81 ++-- .../main/res/layout/fragment_cafeteria.xml | 37 +- .../res/layout/fragment_cafeteria_rating.xml | 148 ++++++++ .../fragment_show_cafeteria_ratings.xml | 128 +++++++ app/src/main/res/layout/list_item_rating.xml | 127 +++++++ .../res/layout/list_item_rating_small.xml | 32 ++ .../res/layout/list_item_rating_tag_large.xml | 53 +++ app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values/colors.xml | 16 + app/src/main/res/values/strings.xml | 4 +- app/src/main/res/values/styles.xml | 11 + 32 files changed, 1504 insertions(+), 262 deletions(-) create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateCafeteriaRatingFragment.kt create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateRatingAdapter.kt create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateTagRatingElement.kt create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowCafeteriaRatingsFragment.kt create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAdapter.kt create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAverage.kt create mode 100644 app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowTagRatingAverage.kt create mode 100644 app/src/main/res/drawable/custom_ratingbar.xml create mode 100644 app/src/main/res/drawable/ic_baseline_photo_camera_24.xml create mode 100644 app/src/main/res/drawable/rating_circle.png create mode 100644 app/src/main/res/layout/cafeteria_tag_chip.xml create mode 100644 app/src/main/res/layout/fragment_cafeteria_rating.xml create mode 100644 app/src/main/res/layout/fragment_show_cafeteria_ratings.xml create mode 100644 app/src/main/res/layout/list_item_rating.xml create mode 100644 app/src/main/res/layout/list_item_rating_small.xml create mode 100644 app/src/main/res/layout/list_item_rating_tag_large.xml diff --git a/app/build.gradle b/app/build.gradle index f352203a24..331b558b59 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -229,3 +229,4 @@ protobuf { } apply plugin: 'com.google.gms.google-services' + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 884b459358..bd3cfcf53a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,38 +4,39 @@ package="de.tum.in.tumcampusapp" android:installLocation="auto" tools:ignore="UnusedAttribute"> - - - - - - - - - - - - - - + + + + android:required="false" /> + android:required="false" /> - - - - + android:required="false" /> + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + android:exported="true" + android:label="@string/app_name"> @@ -102,8 +77,8 @@ + android:exported="true" + android:launchMode="singleTop"> @@ -158,10 +133,10 @@ + android:parentActivityName=".component.ui.overview.MainActivity"> @@ -200,10 +175,10 @@ + android:parentActivityName=".component.ui.overview.MainActivity"> @@ -248,14 +223,12 @@ - + android:label="@string/person_information" /> - + android:theme="@style/AppTheme.NoDrawerLayout" /> - - - + android:exported="false" + android:label="NavigaTUM" /> - - + android:parentActivityName=".component.tumui.calendar.CalendarActivity" /> - - - - - - - - - - - - - - - - - - - - - + + android:taskAffinity=""> - - - - - - - - - - - - + android:name="android.app.searchable" + android:resource="@xml/searchable_mvv" /> + + android:theme="@style/AppTheme.NoDrawerLayout"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/feedback/FeedbackPresenter.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/feedback/FeedbackPresenter.kt index a8091f285b..c262b2986c 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/feedback/FeedbackPresenter.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/feedback/FeedbackPresenter.kt @@ -274,6 +274,7 @@ class FeedbackPresenter @Inject constructor( return true } + override fun onImageOptionSelected(option: Int) { if (option == 0) { if (SDK_INT < M || checkPermission(CAMERA)) { diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuCard.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuCard.kt index 4575948940..5b1e11b0ee 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuCard.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuCard.kt @@ -73,7 +73,7 @@ class CafeteriaMenuCard(context: Context, private val cafeteria: CafeteriaWithMe @JvmStatic fun inflateViewHolder(parent: ViewGroup, interactionListener: CardInteractionListener): CardViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.card_cafeteria_menu, parent, false) - return CafeteriaMenuViewHolder(view, interactionListener) + return CafeteriaMenuViewHolder(view, interactionListener)//,requireA) } } } diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuViewHolder.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuViewHolder.kt index 72ba6eefa1..97e0a4643d 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuViewHolder.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaMenuViewHolder.kt @@ -2,6 +2,8 @@ package de.tum.`in`.tumcampusapp.component.ui.cafeteria import android.view.View import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -9,6 +11,7 @@ import de.tum.`in`.tumcampusapp.R import de.tum.`in`.tumcampusapp.component.ui.cafeteria.details.CafeteriaMenusAdapter import de.tum.`in`.tumcampusapp.component.ui.cafeteria.details.OpenHoursHelper import de.tum.`in`.tumcampusapp.component.ui.cafeteria.model.CafeteriaWithMenus +import de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating.CreateCafeteriaRatingFragment import de.tum.`in`.tumcampusapp.component.ui.overview.CardInteractionListener import de.tum.`in`.tumcampusapp.component.ui.overview.card.CardViewHolder import org.joda.time.format.DateTimeFormat @@ -49,7 +52,20 @@ class CafeteriaMenuViewHolder( menusRecyclerView.layoutManager = LinearLayoutManager(context) menusRecyclerView.itemAnimator = DefaultItemAnimator() - adapter = CafeteriaMenusAdapter(context, false) { performClick() } + val lambda= { /*performClick()*/ + // val intent = Intent(requireContext, CreateCafeteriaRatingActivity::class.java) + // context.startActivity(intent) + val nextFrag = CreateCafeteriaRatingFragment() + val help= itemView.context + + (context as Fragment).requireActivity().supportFragmentManager.beginTransaction() + .replace(R.id.contentFrame, nextFrag, "cafeteriaRating") + .addToBackStack(null) + .commit() + } + + adapter = CafeteriaMenusAdapter(context, false)//,lambda) + menusRecyclerView.adapter = adapter } diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaDetailsSectionFragment.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaDetailsSectionFragment.kt index 648a5a8bc9..32d7193a74 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaDetailsSectionFragment.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaDetailsSectionFragment.kt @@ -14,6 +14,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.zhuinden.fragmentviewbindingdelegatekt.viewBinding import de.tum.`in`.tumcampusapp.R import de.tum.`in`.tumcampusapp.component.ui.cafeteria.model.CafeteriaMenu +import de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating.CreateCafeteriaRatingFragment +import de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating.ShowCafeteriaRatingsFragment import de.tum.`in`.tumcampusapp.databinding.FragmentCafeteriadetailsSectionBinding import de.tum.`in`.tumcampusapp.di.ViewModelFactory import de.tum.`in`.tumcampusapp.di.injector @@ -85,7 +87,15 @@ class CafeteriaDetailsSectionFragment : Fragment() { menusRecyclerView.layoutManager = LinearLayoutManager(requireContext()) menusRecyclerView.itemAnimator = DefaultItemAnimator() - val adapter = CafeteriaMenusAdapter(requireContext(), true, null) + val adapter = CafeteriaMenusAdapter(requireContext(), true + ) { + val nextFrag = ShowCafeteriaRatingsFragment() + + requireActivity().supportFragmentManager.beginTransaction() + .replace(R.id.contentFrame, nextFrag, "cafeteriaRating") + .addToBackStack(null) + .commit() + } menusRecyclerView.adapter = adapter cafeteriaViewModel.cafeteriaMenus.observe( diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenuAdapterItem.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenuAdapterItem.kt index 23dfade118..e9b74d84a4 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenuAdapterItem.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenuAdapterItem.kt @@ -3,11 +3,13 @@ package de.tum.`in`.tumcampusapp.component.ui.cafeteria.details import android.view.View import android.widget.ImageView import android.widget.TextView +import androidx.fragment.app.Fragment import de.tum.`in`.tumcampusapp.R import de.tum.`in`.tumcampusapp.component.ui.cafeteria.CafeteriaMenuFormatter import de.tum.`in`.tumcampusapp.component.ui.cafeteria.FavoriteDishDao import de.tum.`in`.tumcampusapp.component.ui.cafeteria.model.CafeteriaMenu import de.tum.`in`.tumcampusapp.component.ui.cafeteria.model.FavoriteDish +import de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating.CreateCafeteriaRatingFragment import org.joda.time.DateTime import org.joda.time.format.DateTimeFormat @@ -32,7 +34,16 @@ sealed class CafeteriaMenuAdapterItem { val headerTextView = findViewById(R.id.headerTextView) headerTextView.text = menu.typeLong.replace("[0-9]", "").trim() - setOnClickListener { listener?.invoke() } + setOnClickListener { + listener?.invoke() +/* val nextFrag = CreateCafeteriaRatingFragment() + val help= it.context + + (context as Fragment).requireActivity().supportFragmentManager.beginTransaction() + .replace(R.id.contentFrame, nextFrag, "cafeteriaRating") + .addToBackStack(null) + .commit()*/ + } } } diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenusAdapter.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenusAdapter.kt index 7667d5b455..2588b74001 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenusAdapter.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/details/CafeteriaMenusAdapter.kt @@ -1,9 +1,12 @@ package de.tum.`in`.tumcampusapp.component.ui.cafeteria.details import android.content.Context +import android.content.Intent +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TextView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import de.tum.`in`.tumcampusapp.R @@ -48,10 +51,10 @@ class CafeteriaMenusAdapter( fun update(menus: List) { val newItems = menus - .filter(this::shouldShowMenu) - .splitOnChanged { it.typeLong } - .map(this::createAdapterItemsForSection) - .flatten() + .filter(this::shouldShowMenu) + .splitOnChanged { it.typeLong } + .map(this::createAdapterItemsForSection) + .flatten() val diffResult = DiffUtil.calculateDiff(DiffUtilCallback(adapterItems, newItems)) @@ -63,9 +66,9 @@ class CafeteriaMenusAdapter( private fun shouldShowMenu(menu: CafeteriaMenu): Boolean { val shouldShowMenuType = Utils.getSettingBool( - context, - "card_cafeteria_${menu.typeShort}", - "tg" == menu.typeShort || "ae" == menu.typeShort + context, + "card_cafeteria_${menu.typeShort}", + "tg" == menu.typeShort || "ae" == menu.typeShort ) return shouldShowMenuType || isBigLayout } @@ -90,7 +93,15 @@ class CafeteriaMenusAdapter( } } - class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + init { + itemView.setBackgroundColor(0x80808) + itemView.setOnClickListener({ + // itemView.findViewById(R.id.nameTextView).text = "clicked" + Log.d("help", "test: ") + }) + } + } private class DiffUtilCallback( private val oldItems: List, diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/fragment/CafeteriaFragment.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/fragment/CafeteriaFragment.kt index 63297ebe93..f58516e6be 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/fragment/CafeteriaFragment.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/fragment/CafeteriaFragment.kt @@ -19,6 +19,7 @@ import de.tum.`in`.tumcampusapp.component.ui.cafeteria.controller.CafeteriaManag import de.tum.`in`.tumcampusapp.component.ui.cafeteria.details.CafeteriaDetailsSectionsPagerAdapter import de.tum.`in`.tumcampusapp.component.ui.cafeteria.details.CafeteriaViewModel import de.tum.`in`.tumcampusapp.component.ui.cafeteria.model.Cafeteria +import de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating.CreateCafeteriaRatingFragment import de.tum.`in`.tumcampusapp.databinding.FragmentCafeteriaBinding import de.tum.`in`.tumcampusapp.di.ViewModelFactory import de.tum.`in`.tumcampusapp.di.injector @@ -26,6 +27,7 @@ import de.tum.`in`.tumcampusapp.service.DownloadWorker import de.tum.`in`.tumcampusapp.utils.Const import de.tum.`in`.tumcampusapp.utils.Utils import de.tum.`in`.tumcampusapp.utils.observeNonNull +import org.jetbrains.anko.sdk27.coroutines.onClick import org.joda.time.DateTime import javax.inject.Inject import javax.inject.Provider @@ -84,6 +86,14 @@ class CafeteriaFragment : FragmentForDownloadingExternal( binding.spinnerToolbar.adapter = adapter binding.spinnerToolbar.onItemSelectedListener = this + binding.floatingActionButton.onClick { + val nextFrag = CreateCafeteriaRatingFragment() + requireActivity().supportFragmentManager.beginTransaction() + .replace(R.id.contentFrame, nextFrag, "cafeteriaRating") + .addToBackStack(null) + .commit() + } + cafeteriaViewModel.cafeterias.observeNonNull(this) { updateCafeterias(it) } cafeteriaViewModel.selectedCafeteria.observeNonNull(this) { onNewCafeteriaSelected(it) } cafeteriaViewModel.menuDates.observeNonNull(this) { updateSectionsPagerAdapter(it) } diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateCafeteriaRatingFragment.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateCafeteriaRatingFragment.kt new file mode 100644 index 0000000000..2579f95e83 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateCafeteriaRatingFragment.kt @@ -0,0 +1,255 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + + +import android.Manifest +import android.content.ActivityNotFoundException +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import android.provider.MediaStore +import android.view.View +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.annotation.RequiresApi +import androidx.appcompat.app.AlertDialog +import androidx.core.content.ContextCompat +import androidx.core.content.FileProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.zhuinden.fragmentviewbindingdelegatekt.viewBinding +import de.tum.`in`.tumcampusapp.R +import de.tum.`in`.tumcampusapp.component.other.generic.fragment.FragmentForAccessingTumCabe +import de.tum.`in`.tumcampusapp.component.tumui.feedback.FeedbackPresenter +import de.tum.`in`.tumcampusapp.databinding.FragmentCafeteriaRatingBinding +import de.tum.`in`.tumcampusapp.utils.ImageUtils +import de.tum.`in`.tumcampusapp.utils.Utils +import java.io.File +import java.io.IOException + + +class CreateCafeteriaRatingFragment : FragmentForAccessingTumCabe>( + R.layout.fragment_cafeteria_rating, + R.string.create_cafeteria_rating +), AdapterView.OnItemSelectedListener { + + + // used to access the photo functionality + // todo potentially split to another camera "forwarder" + // @Inject + // lateinit var presenter: FeedbackContract.Presenter + + private val binding by viewBinding(FragmentCafeteriaRatingBinding::bind) + + + private val itemsList = ArrayList() + private lateinit var createTagRatingAdapter: CreateRatingAdapter + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val cafeterias = arrayOf("Mensa Garching", "mensa leopoldstrasse") + val meals = arrayOf("Only The Cafeteria", "Pizza Margeritha") + // binding.pickCafeteriaSpinner; + // val spinner = findViewById(R.id.pickCafeteriaSpinner) + if (binding.pickCafeteriaCreateSpinner != null) { + val adapter = ArrayAdapter( + requireContext(), + android.R.layout.simple_spinner_dropdown_item, cafeterias + ) + binding.pickCafeteriaCreateSpinner.adapter = adapter + } + + if (binding.pickDishCreateSpinner != null) { + val adapter = ArrayAdapter( + requireContext(), + android.R.layout.simple_spinner_dropdown_item, meals + ) + binding.pickDishCreateSpinner.adapter = adapter + } + prepareItems() + + // val recyclerView: RecyclerView = findViewById(R.id.recyclerView) + createTagRatingAdapter = CreateRatingAdapter(itemsList) + val layoutManager = LinearLayoutManager(requireContext()) + binding.tagOptionListRecyclerView.layoutManager = layoutManager + binding.tagOptionListRecyclerView.adapter = createTagRatingAdapter + +// todo eigeneer contract und co benötigt? + /*presenter.attachView(view) + + if (savedInstanceState != null) { + presenter.onRestoreInstanceState(savedInstanceState) + }*/ + + binding.addImageButton.setOnClickListener { showImageOptionsDialog() } + } + + private fun prepareItems() { + itemsList.add(CreateTagRatingElement("Waiting time")) + itemsList.add(CreateTagRatingElement("Variety General")) + itemsList.add(CreateTagRatingElement("Variety Vegetarian")) + itemsList.add(CreateTagRatingElement("Variety Vegan")) + itemsList.add(CreateTagRatingElement("Enough free tables")) + } + + + private var currentPhotoPath: String? = null + + + private fun showImageOptionsDialog() { + val options = + arrayOf(getString(R.string.feedback_take_picture), getString(R.string.gallery)) + val alertDialog = AlertDialog.Builder(requireContext()) + .setTitle(R.string.feedback_add_picture) + .setItems(options) { _, index -> onImageOptionSelected(index) } + .setNegativeButton(R.string.cancel, null) + .create() + alertDialog.window?.setBackgroundDrawableResource(R.drawable.rounded_corners_background) + alertDialog.show() + } + + fun onImageOptionSelected(option: Int) { + if (option == 0) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || checkPermission(Manifest.permission.CAMERA)) { + takePicture() + } + } else { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) { + openGallery() + } + } + } + + /** + * @return true if user has given permission before + */ + @RequiresApi(api = Build.VERSION_CODES.M) + private fun checkPermission(permission: String): Boolean { + val permissionCheck = ContextCompat.checkSelfPermission(requireContext(), permission) + + if (permissionCheck == PackageManager.PERMISSION_DENIED) { + val requestCode = when (permission) { + Manifest.permission.READ_EXTERNAL_STORAGE -> FeedbackPresenter.PERMISSION_FILES + Manifest.permission.CAMERA -> FeedbackPresenter.PERMISSION_CAMERA + else -> FeedbackPresenter.PERMISSION_LOCATION + } + + showPermissionRequestDialog(permission, requestCode) + return false + } + return true + } + + @RequiresApi(api = Build.VERSION_CODES.M) + fun showPermissionRequestDialog(permission: String, requestCode: Int) { + requestPermissions(arrayOf(permission), requestCode) + } + + fun takePicture() { + val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) + + // Create the file where the photo should go + var photoFile: File? = null + try { + photoFile = ImageUtils.createImageFile(requireContext()) + currentPhotoPath = photoFile.absolutePath + } catch (e: IOException) { + Utils.log(e) + } + + if (photoFile == null) { + return + } + + val authority = "de.tum.in.tumcampusapp.fileprovider" + val photoURI = FileProvider.getUriForFile(requireContext(), authority, photoFile) + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI) + try { + openCamera(takePictureIntent) + } catch (e: ActivityNotFoundException) { + photoFile.delete() + } + } + + fun openGallery() { + val intent = Intent() + intent.type = "image/*" + intent.action = Intent.ACTION_GET_CONTENT + + // val chooser = Intent.createChooser(intent, "Select file") + // openGallery(chooser) + } + + fun openCamera(intent: Intent) { + startActivityForResult(intent, FeedbackPresenter.REQUEST_TAKE_PHOTO) + } + // val cafeterias = arrayOf("mensa garching", "mensa leopoldstrasse") + + // Drop-down navigation +/* private val selectCafeteriasSpinner: Spinner + get() { + + val groupAdapter = object : ArrayAdapter( + context!!, + android.R.layout.simple_spinner_dropdown_item, + android.R.id.text1, + cafeterias + ) { + val inflater = LayoutInflater.from(context) + + override fun getDropDownView(pos: Int, ignored: View?, parent: ViewGroup): View { + val v = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false) + val studyRoomGroup = getItem(pos) ?: return v + val nameTextView = v.findViewById(android.R.id.text1) + nameTextView.text = studyRoomGroup + return v + } + } + + groupAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + return binding.pickCafeteriaSpinner.apply { + adapter = groupAdapter + onItemSelectedListener = this@CafeteriaRatingFragment + } + }*/ + + override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { +//todo toast mit id + } + + override fun onNothingSelected(adapterView: AdapterView<*>?) = Unit + + /*override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + val rootView: View = inflater.inflate(de.tum.`in`.tumcampusapp.R.layout.activity_cafeteria_rating, container, false) + displayCafeterias() + return rootView + }*/ + +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// +// } + + + /* private fun displayCafeterias() { + selectCurrentSpinnerItem() + // binding.spinnerContainer.visibility = View.VISIBLE + // showLoadingEnded() + } + + private fun selectCurrentSpinnerItem() { + cafeterias.forEachIndexed { i, a -> + + // selectCafeteriasSpinner.setSelection(i) + + } + } + */ + companion object { + + private const val NONE_SELECTED = -1 + + @JvmStatic + fun newInstance() = CreateCafeteriaRatingFragment() + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateRatingAdapter.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateRatingAdapter.kt new file mode 100644 index 0000000000..980a7277e2 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateRatingAdapter.kt @@ -0,0 +1,34 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.annotation.NonNull +import androidx.recyclerview.widget.RecyclerView +import de.tum.`in`.tumcampusapp.R + +class CreateRatingAdapter(private var itemsList: List) : +RecyclerView.Adapter() { + + + class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var itemTextView: TextView = view.findViewById(R.id.tagItemLabel) + } + + @NonNull + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val itemView = LayoutInflater.from(parent.context) + .inflate(R.layout.list_item_rating_tag_large, parent, false) + return ViewHolder(itemView) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = itemsList[position] + holder.itemTextView.text = item.tagLabel + } + + override fun getItemCount(): Int { + return itemsList.size + } +} \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateTagRatingElement.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateTagRatingElement.kt new file mode 100644 index 0000000000..b0527d4532 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/CreateTagRatingElement.kt @@ -0,0 +1,10 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + +class CreateTagRatingElement { + var tagLabel: String="label" + private var points=1 + + constructor(tagLabel: String) { + this.tagLabel = tagLabel + } +} \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowCafeteriaRatingsFragment.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowCafeteriaRatingsFragment.kt new file mode 100644 index 0000000000..cd1ad220a7 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowCafeteriaRatingsFragment.kt @@ -0,0 +1,124 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + +import android.os.Bundle +import android.view.View +import android.widget.ArrayAdapter +import androidx.recyclerview.widget.LinearLayoutManager +import com.zhuinden.fragmentviewbindingdelegatekt.viewBinding +import de.tum.`in`.tumcampusapp.R +import de.tum.`in`.tumcampusapp.component.other.generic.fragment.FragmentForAccessingTumCabe +import de.tum.`in`.tumcampusapp.databinding.FragmentShowCafeteriaRatingsBinding + + +class ShowCafeteriaRatingsFragment : FragmentForAccessingTumCabe>( + R.layout.fragment_show_cafeteria_ratings, + R.string.view_cafeteria_rating +) { + + + private val binding by viewBinding(FragmentShowCafeteriaRatingsBinding::bind) + + + private val itemsList = ArrayList() + private lateinit var showTagRatingAdapter: ShowRatingAdapter + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val cafeterias = arrayOf("Mensa Garching", "Mensa Leopoldstrasse") + val meals = arrayOf("Only The Cafeteria", "Pizza Margeritha") + + + + binding.pickCafeteriaShowSpinner.adapter = ArrayAdapter( + requireContext(), + android.R.layout.simple_spinner_dropdown_item, cafeterias + ) + + + binding.pickDishShowSpinner.adapter = ArrayAdapter( + requireContext(), + android.R.layout.simple_spinner_dropdown_item, meals + ) + + prepareItems() + + + showTagRatingAdapter = ShowRatingAdapter(itemsList) + val layoutManager = LinearLayoutManager(requireContext()) + binding.showSingleRatingsRecyclerView.layoutManager = layoutManager + binding.showSingleRatingsRecyclerView.adapter = showTagRatingAdapter + } + + + private fun prepareItems() { + val nameTagResults = listOf( + ShowTagRatingAverage("bad", 1.0, 1, 5, 1.0), + ShowTagRatingAverage("Variety Vegetarian", 2.0, 1, 5, 1.0), + ShowTagRatingAverage("Variety Vegan", 3.0, 1, 5, 1.0), + ShowTagRatingAverage("something", 4.0, 1, 5, 1.0), + ShowTagRatingAverage("clean", 5.0, 1, 5, 1.0) + ) + itemsList.add( + ShowRatingAverage( + false, + 1, + "Important comment on this beautiful rating. Sometimes, a comment must be longer than one line", + nameTagResults, + nameTagResults + ) + ) + itemsList.add( + ShowRatingAverage( + false, + 2, + "", + nameTagResults, + nameTagResults + ) + ) + itemsList.add( + ShowRatingAverage( + false, + 3, + "", + nameTagResults, + nameTagResults + ) + ) + itemsList.add( + ShowRatingAverage( + false, + 4, + "Important comment on this beautiful rating", + nameTagResults, + nameTagResults + ) + ) + itemsList.add( + ShowRatingAverage( + false, + 5, + "Important comment on this beautiful rating", + nameTagResults, + nameTagResults + ) + ) + itemsList.add( + ShowRatingAverage( + true, + 3, + "Important comment on this beautiful rating", + nameTagResults, + nameTagResults + ) + ) + + } + + + companion object { + @JvmStatic + fun newInstance() = CreateCafeteriaRatingFragment() + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAdapter.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAdapter.kt new file mode 100644 index 0000000000..ada8198c04 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAdapter.kt @@ -0,0 +1,139 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.RatingBar +import android.widget.TextView +import android.widget.Toast +import androidx.annotation.NonNull +import androidx.cardview.widget.CardView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.chip.Chip +import com.google.android.material.chip.ChipGroup +import de.tum.`in`.tumcampusapp.R + +class ShowRatingAdapter(private var itemsList: List) : + RecyclerView.Adapter() { + + + private lateinit var context: Context + + class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var chipGroup: ChipGroup = view.findViewById(R.id.chipGroup) + var ratingCommentTextView: TextView = view.findViewById(R.id.ratingCommentTextView) + var showRatingImageViewHolder: CardView = view.findViewById(R.id.showRatingImageViewHolder) + var singleRatingPointsRatingBar: RatingBar = + view.findViewById(R.id.singleRatingPointsRatingBar) + + // var ratingResultNumberTextView: TextView = view.findViewById(R.id.ratingResultNumberTextView) + var listItemHolderCardView: LinearLayout = view.findViewById(R.id.listItemHolderCardView) + + } + + @NonNull + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val itemView = LayoutInflater.from(parent.context) + .inflate(R.layout.list_item_rating, parent, false) + context = parent.context + return ViewHolder(itemView) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = itemsList[position] + + if (item.img) { + holder.showRatingImageViewHolder.visibility = View.VISIBLE + } + if (item.comment.length > 0) { + holder.ratingCommentTextView.visibility = View.VISIBLE + holder.ratingCommentTextView.text = item.comment + } + + if (item.points == 1) { + holder.listItemHolderCardView.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.rating_1 + ) + ) + } else if (item.points == 2) { + holder.listItemHolderCardView.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.rating_2 + ) + ) + } else if (item.points == 3) { + holder.listItemHolderCardView.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.rating_3 + ) + ) + } else if (item.points == 4) { + holder.listItemHolderCardView.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.rating_4 + ) + ) + } else { + holder.listItemHolderCardView.setBackgroundColor( + ContextCompat.getColor( + context, + R.color.rating_5 + ) + ) + } + + holder.singleRatingPointsRatingBar.rating = item.points.toFloat() + setupChip(holder.chipGroup, item.RatingTagsResults) + } + + override fun getItemCount(): Int { + return itemsList.size + } + + private fun setupChip(chipGroup: ChipGroup, ratingTagsResults: List) { + + for (tag in ratingTagsResults) { + val chip = createChip(tag) + + chipGroup.addView(chip) + } + } + + private fun createChip(label: ShowTagRatingAverage): Chip { + val chip = Chip(context) + + var colorHelper = R.color.tum_light_gray + /*if (label.points == 2.0) { + colorHelper = R.color.rating_2_0 + } else if (label.points == 3.0) { + colorHelper = R.color.rating_3_0 + } else if (label.points == 4.0) { + colorHelper = R.color.rating_4_0 + } else if (label.points == 5.0) { + colorHelper = R.color.rating_5_0 + }*/ + + chip.chipBackgroundColor = ColorStateList.valueOf( + ContextCompat.getColor( + context, + colorHelper + ) + ) + chip.text = label.tagLabel + + chip.setOnClickListener { + Toast.makeText(context, "Rating: "+label.points, Toast.LENGTH_SHORT).show() + } + + return chip + } +} \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAverage.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAverage.kt new file mode 100644 index 0000000000..3c323cef35 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowRatingAverage.kt @@ -0,0 +1,9 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + +class ShowRatingAverage( + var img: Boolean, + var points: Int, + var comment: String, + var RatingTagsResults: List, + var NameTagsResults: List +) \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowTagRatingAverage.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowTagRatingAverage.kt new file mode 100644 index 0000000000..69c3d4e65c --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/rating/ShowTagRatingAverage.kt @@ -0,0 +1,11 @@ +package de.tum.`in`.tumcampusapp.component.ui.cafeteria.rating + +class ShowTagRatingAverage( + var tagLabel: String, + var points: Double, + var max: Int, + var min: Int, + var std: Double +) { + +} \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/database/TcaDb.kt b/app/src/main/java/de/tum/in/tumcampusapp/database/TcaDb.kt index 15470e3688..22af628460 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/database/TcaDb.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/database/TcaDb.kt @@ -68,38 +68,34 @@ import de.tum.`in`.tumcampusapp.utils.sync.SyncDao import de.tum.`in`.tumcampusapp.utils.sync.model.Sync import java.util.concurrent.ExecutionException -@Database( - version = 7, - entities = [ - Cafeteria::class, - CafeteriaMenu::class, - FavoriteDish::class, - Sync::class, - BuildingToGps::class, - Kino::class, - Event::class, - Ticket::class, - TicketType::class, - ChatMessage::class, - Location::class, - News::class, - NewsSources::class, - CalendarItem::class, - EventSeriesMapping::class, - RoomLocations::class, - WidgetsTimetableBlacklist::class, - Recent::class, - StudyRoomGroup::class, - StudyRoom::class, - FcmNotification::class, - TransportFavorites::class, - WidgetsTransport::class, - ChatRoomDbRow::class, - ScheduledNotification::class, - ActiveAlarm::class, - EventColor::class - ] -) +@Database(version = 7, entities = [ + Cafeteria::class, + CafeteriaMenu::class, + FavoriteDish::class, + Sync::class, + BuildingToGps::class, + Kino::class, + Event::class, + Ticket::class, + TicketType::class, + ChatMessage::class, + Location::class, + News::class, + NewsSources::class, + CalendarItem::class, + EventSeriesMapping::class, + RoomLocations::class, + WidgetsTimetableBlacklist::class, + Recent::class, + StudyRoomGroup::class, + StudyRoom::class, + FcmNotification::class, + TransportFavorites::class, + WidgetsTransport::class, + ChatRoomDbRow::class, + ScheduledNotification::class, + ActiveAlarm::class, + EventColor::class]) @TypeConverters(Converters::class) abstract class TcaDb : RoomDatabase() { diff --git a/app/src/main/res/drawable/custom_ratingbar.xml b/app/src/main/res/drawable/custom_ratingbar.xml new file mode 100644 index 0000000000..3c91616cb7 --- /dev/null +++ b/app/src/main/res/drawable/custom_ratingbar.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_photo_camera_24.xml b/app/src/main/res/drawable/ic_baseline_photo_camera_24.xml new file mode 100644 index 0000000000..43a4fd5fd8 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_photo_camera_24.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/drawable/rating_circle.png b/app/src/main/res/drawable/rating_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..71cdd158dd9a53ad973d6d175388b20bf256e1eb GIT binary patch literal 670 zcmV;P0%84$P)glOdxP(aGX zzeCiOc-;epj=6-CYsmrU*C#3WQLj(;5CL!$m>~?k_7Hf0YRg{d0#S57SyZ=1wdi{~ z?~c7@0~pkAQR|BMDIx#{fIu$@q|5=Um@ih{N)^vL(prHXgeX`*0Q6I~5A}kAs4f3^ijWW~m-K?ZpasBu3Wz!K zd6_Kgd)69o6IkgX;tQF~Ery1^w}&Xq8gK)(+wOK&aGYz5jC|g0@b_npl#67u=YdyU zM9cw~34(X+4sds^Rw|nmi<4|^HGqpiwnM-+@Q8f=F22A1rvpv?gdaxzknaHfhJY$C z0hE*7(K%!XG!Va*xB{F-ZK(9u63f6F;3e=(U#v{>69;6Gvp%`WI{*Lx07*qoM6N<$ Ef`nTpHUIzs literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/cafeteria_tag_chip.xml b/app/src/main/res/layout/cafeteria_tag_chip.xml new file mode 100644 index 0000000000..bcd2be9ee7 --- /dev/null +++ b/app/src/main/res/layout/cafeteria_tag_chip.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/card_price_line_big.xml b/app/src/main/res/layout/card_price_line_big.xml index 54a689352c..d4181428d8 100644 --- a/app/src/main/res/layout/card_price_line_big.xml +++ b/app/src/main/res/layout/card_price_line_big.xml @@ -1,5 +1,7 @@ - - + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/textView2" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + - - - - + android:text="hello" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + diff --git a/app/src/main/res/layout/fragment_cafeteria.xml b/app/src/main/res/layout/fragment_cafeteria.xml index 0f76381290..c5ad7cabee 100644 --- a/app/src/main/res/layout/fragment_cafeteria.xml +++ b/app/src/main/res/layout/fragment_cafeteria.xml @@ -1,13 +1,17 @@ - + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_height="wrap_content" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + + + + diff --git a/app/src/main/res/layout/fragment_cafeteria_rating.xml b/app/src/main/res/layout/fragment_cafeteria_rating.xml new file mode 100644 index 0000000000..14bc6dddf7 --- /dev/null +++ b/app/src/main/res/layout/fragment_cafeteria_rating.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_show_cafeteria_ratings.xml b/app/src/main/res/layout/fragment_show_cafeteria_ratings.xml new file mode 100644 index 0000000000..28768fc3af --- /dev/null +++ b/app/src/main/res/layout/fragment_show_cafeteria_ratings.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_item_rating.xml b/app/src/main/res/layout/list_item_rating.xml new file mode 100644 index 0000000000..7f22543f10 --- /dev/null +++ b/app/src/main/res/layout/list_item_rating.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_item_rating_small.xml b/app/src/main/res/layout/list_item_rating_small.xml new file mode 100644 index 0000000000..597039a21a --- /dev/null +++ b/app/src/main/res/layout/list_item_rating_small.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_item_rating_tag_large.xml b/app/src/main/res/layout/list_item_rating_tag_large.xml new file mode 100644 index 0000000000..d920bb9305 --- /dev/null +++ b/app/src/main/res/layout/list_item_rating_tag_large.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 58479afd2c..a5cb63afd1 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -181,6 +181,8 @@ Rückmeldung Allgemeine Informationen Mensen + Mensa Bewertung + View Mensa Bewertung Personensuche Roomfinder Öffnungszeiten @@ -300,7 +302,7 @@ \n11 mit einer Zuckerart und Süßungsmitteln Inhaltsstoffe Mensa Benachrichtigungen - + Neue Bewertung Ungültige Zeit ausgewählt. Wähle eine Uhrzeit im folgenden Intervall %1$d – %2$d. diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 45e03f3347..0df5ab1728 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -101,6 +101,22 @@ #FFFF0000 #7cbc49 + #1FD50000 + #1FD96B0C + #1FDCD618 + #1F87B315 + #1F318F11 + + #D50000 + #d73606 + #d96b0c + #daa112 + #dcd618 + #b1c416 + #87b315 + #5ca113 + #318f11 + #318F11 #3F9711 #4EA012 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9d0dff9010..0477f469f2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -219,6 +219,8 @@ Tuition Fees General Information Cafeterias + Cafeteria Rating + View Cafeteria Rating Person Search Roomfinder Study Rooms @@ -347,7 +349,7 @@ \n11 with sugar and sweeteners Ingredients Cafeteria Notification Settings - + Create Rating Invalid time. Pick a time ranging from %1$d to %2$d. diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0cc2dbf681..f79ee37c29 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -215,6 +215,13 @@ @dimen/material_default_padding + + +