All sheets now have a button to dismiss the sheet

This commit is contained in:
denizk0461
2023-05-03 21:49:18 +02:00
parent df1d127a17
commit 9e5277a5f6
15 changed files with 210 additions and 61 deletions
@@ -131,6 +131,12 @@ class SettingsFragment : AppFragment() {
true true
} }
val cheesyWisdoms: MutableList<String> = resources
.getStringArray(R.array.cheesy_wisdoms)
.toList()
.shuffled()
.toMutableList()
// Set click listener for the app version button // Set click listener for the app version button
binding.buttonAppVersion.setOnClickListener { binding.buttonAppVersion.setOnClickListener {
when (appVersionClick) { when (appVersionClick) {
@@ -152,10 +158,30 @@ class SettingsFragment : AppFragment() {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(mysteryLink))) startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(mysteryLink)))
} }
238 -> { // after 222 has been reached, this loops every 16 clicks 238 -> { // after 222 has been reached, this loops every 16 clicks
showToast(context, resources.getStringArray(R.array.cheesy).random()) // Show the next cheesy wisdom
showToast(context, cheesyWisdoms[0])
// Remove the cheesy wisdom from the list
cheesyWisdoms.removeAt(0)
// Get new cheesy wisdoms if cheesy wisdoms have run out
if (cheesyWisdoms.isEmpty()) {
cheesyWisdoms.addAll(resources
.getStringArray(R.array.cheesy_wisdoms)
.toList()
.shuffled()
)
}
/*
* Reset to 222 to make the user click 16 times again before the next cheesy
* wisdom is shown.
*/
appVersionClick = 222 appVersionClick = 222
} }
} }
// Increment click counter
appVersionClick += 1 appVersionClick += 1
} }
@@ -64,6 +64,12 @@ class AllergenConfigSheet : AppSheet(R.layout.sheet_allergen_config) {
binding.buttonSave.setOnClickListener { binding.buttonSave.setOnClickListener {
saveAllergenPrefs() saveAllergenPrefs()
} }
// Set up close button
binding.buttonCancel.setOnClickListener {
// Do nothing and dismiss the sheet
dismiss()
}
} }
/** /**
@@ -95,6 +95,12 @@ class AllergenSheet : AppSheet(R.layout.sheet_allergen) {
textPrice.text = offer.price textPrice.text = offer.price
} }
} }
// Set up close button
binding.buttonCancel.setOnClickListener {
// Do nothing and dismiss the sheet
dismiss()
}
} catch (e: ParcelNotFoundException) { } catch (e: ParcelNotFoundException) {
// Tell the user that something went wrong when retrieving Parcelable // Tell the user that something went wrong when retrieving Parcelable
showToast(context, getString(R.string.canteen_page_allergen_sheet_error)) showToast(context, getString(R.string.canteen_page_allergen_sheet_error))
@@ -99,6 +99,12 @@ class DevCodeSheet : AppSheet(R.layout.sheet_dev_code) {
} }
dismiss() dismiss()
} }
// Set up close button
binding.buttonCancel.setOnClickListener {
// Do nothing and dismiss the sheet
dismiss()
}
} }
/** /**
@@ -114,13 +120,6 @@ class DevCodeSheet : AppSheet(R.layout.sheet_dev_code) {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(link))) startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(link)))
} }
/**
* Encodes a string to Base64.
*
* @return the encoded string
*/
private val String.e64: String get() = Base64.encodeToString(this.toByteArray(), Base64.DEFAULT)
/** /**
* Decodes Base64 to a regular string. * Decodes Base64 to a regular string.
@@ -203,8 +203,11 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update), TimePicker
else -> Pair(0, R.string.monday) // assume Monday else -> Pair(0, R.string.monday) // assume Monday
} }
// Store the new day
selectedDay = newDay selectedDay = newDay
// Prepare layout animation
TransitionManager.beginDelayedTransition(binding.sheet.parent as ViewGroup)
// Set newly selected day to the button // Set newly selected day to the button
binding.buttonDay.text = getString(newDayId) binding.buttonDay.text = getString(newDayId)
@@ -277,7 +280,7 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update), TimePicker
}.show((context as FragmentActivity).supportFragmentManager, "timePicker") }.show((context as FragmentActivity).supportFragmentManager, "timePicker")
} }
// Prepare cancel button // Set up close button
binding.buttonCancel.setOnClickListener { binding.buttonCancel.setOnClickListener {
// Do nothing and dismiss the sheet // Do nothing and dismiss the sheet
dismiss() dismiss()
@@ -334,7 +337,7 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update), TimePicker
// Check if the title field is blank // Check if the title field is blank
if (binding.editTextTitle.text.toString().isBlank()) { if (binding.editTextTitle.text.toString().isBlank()) {
// Set an error on the title field // Set an error on the title field
binding.editTextTitle.error = binding.textLayoutTitle.error =
getString(R.string.sheet_schedule_update_text_field_empty_error) getString(R.string.sheet_schedule_update_text_field_empty_error)
// Set that the action must not be executed // Set that the action must not be executed
@@ -344,7 +347,7 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update), TimePicker
// Check if the lecturer field is blank // Check if the lecturer field is blank
if (binding.editTextLecturers.text.toString().isBlank()) { if (binding.editTextLecturers.text.toString().isBlank()) {
// Set an error on the lecturer field // Set an error on the lecturer field
binding.editTextLecturers.error = binding.textLayoutLecturers.error =
getString(R.string.sheet_schedule_update_text_field_empty_error) getString(R.string.sheet_schedule_update_text_field_empty_error)
// Set that the action must not be executed // Set that the action must not be executed
@@ -354,7 +357,7 @@ class ScheduleUpdateSheet : AppSheet(R.layout.sheet_schedule_update), TimePicker
// Check if the room field is blank // Check if the room field is blank
if (binding.editTextRoom.text.toString().isBlank()) { if (binding.editTextRoom.text.toString().isBlank()) {
// Set an error on the room field // Set an error on the room field
binding.editTextRoom.error = binding.textLayoutRoom.error =
getString(R.string.sheet_schedule_update_text_field_empty_error) getString(R.string.sheet_schedule_update_text_field_empty_error)
// Set that the action must not be executed // Set that the action must not be executed
@@ -28,5 +28,11 @@ class TextSheet : AppSheet(R.layout.sheet_text) {
textHeader.text = header textHeader.text = header
textContent.text = content textContent.text = content
} }
// Set up close button
binding.buttonCancel.setOnClickListener {
// Do nothing and dismiss the sheet
dismiss()
}
} }
} }
+2 -1
View File
@@ -230,7 +230,8 @@
android:contentDescription="@string/canteen_fab_refresh_content_desc" android:contentDescription="@string/canteen_fab_refresh_content_desc"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
android:layout_marginEnd="@dimen/fab_margin" android:layout_marginEnd="@dimen/fab_margin"
android:layout_marginBottom="@dimen/fab_margin"/> android:layout_marginBottom="@dimen/fab_margin"
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"/>
<!-- <androidx.coordinatorlayout.widget.CoordinatorLayout--> <!-- <androidx.coordinatorlayout.widget.CoordinatorLayout-->
<!-- android:id="@+id/snackbar_container"--> <!-- android:id="@+id/snackbar_container"-->
+3 -2
View File
@@ -14,7 +14,7 @@
<TextView <TextView
android:id="@+id/app_title_bar" android:id="@+id/app_title_bar"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/title_schedule" android:text="@string/title_schedule"
android:textSize="32sp" android:textSize="32sp"
@@ -46,6 +46,7 @@
android:contentDescription="@string/sheet_schedule_update_header_add" android:contentDescription="@string/sheet_schedule_update_header_add"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
android:layout_marginEnd="@dimen/fab_margin" android:layout_marginEnd="@dimen/fab_margin"
android:layout_marginBottom="@dimen/fab_margin"/> android:layout_marginBottom="@dimen/fab_margin"
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
+29 -6
View File
@@ -12,14 +12,37 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"/> android:layout_gravity="center"/>
<TextView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/text_category" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="22sp"
android:fontFamily="@font/lato_blackitalic"
android:layout_marginBottom="2dp" android:layout_marginBottom="2dp"
android:paddingHorizontal="24dp"/> android:paddingHorizontal="24dp">
<TextView
android:id="@+id/text_category"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="22sp"
android:fontFamily="@font/lato_blackitalic"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_cancel"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.TextButton"
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
app:icon="@drawable/cross"
app:iconPadding="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:iconTint="?attr/colorOnSurfaceVariant"
android:layout_marginStart="16dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView <TextView
android:id="@+id/text_title" android:id="@+id/text_title"
@@ -11,15 +11,38 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"/> android:layout_gravity="center"/>
<TextView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/text_title" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="22sp" android:layout_marginBottom="8dp"
android:fontFamily="@font/lato_bolditalic" android:paddingHorizontal="24dp">
android:text="@string/allergens_config_header"
android:layout_marginHorizontal="24dp" <TextView
android:layout_marginBottom="8dp"/> android:id="@+id/text_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="22sp"
android:fontFamily="@font/lato_bolditalic"
android:text="@string/allergens_config_header"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_cancel"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.TextButton"
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
app:icon="@drawable/cross"
app:iconPadding="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:iconTint="?attr/colorOnSurfaceVariant"
android:layout_marginStart="16dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
+29 -7
View File
@@ -11,15 +11,37 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"/> android:layout_gravity="center"/>
<TextView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/text_header" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="22sp"
android:fontFamily="@font/lato_bolditalic"
android:paddingHorizontal="24dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:text="@string/sheet_cheat_header"/> android:paddingHorizontal="24dp">
<TextView
android:id="@+id/text_header"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="22sp"
android:fontFamily="@font/lato_bolditalic"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_cancel"
android:text="@string/sheet_cheat_header"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.TextButton"
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
app:icon="@drawable/cross"
app:iconPadding="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:iconTint="?attr/colorOnSurfaceVariant"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.Material3.TextInputLayout.OutlinedBox" style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
@@ -12,19 +12,22 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"/> android:layout_gravity="center"/>
<androidx.coordinatorlayout.widget.CoordinatorLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp"> android:layout_marginBottom="8dp"
android:paddingHorizontal="24dp">
<TextView <TextView
android:id="@+id/sheet_title" android:id="@+id/sheet_title"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="22sp" android:textSize="22sp"
android:fontFamily="@font/lato_blackitalic" android:fontFamily="@font/lato_blackitalic"
android:layout_gravity="start|center_vertical" app:layout_constraintTop_toTopOf="parent"
android:paddingHorizontal="24dp"/> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_cancel"/>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.TextButton" style="@style/Widget.Material3.Button.TextButton"
@@ -34,11 +37,12 @@
android:minWidth="0dp" android:minWidth="0dp"
app:icon="@drawable/cross" app:icon="@drawable/cross"
app:iconPadding="0dp" app:iconPadding="0dp"
android:layout_gravity="end|center_vertical" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:iconTint="?attr/colorOnSurfaceVariant" app:iconTint="?attr/colorOnSurfaceVariant"
android:paddingHorizontal="24dp"/> android:layout_marginStart="16dp"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -54,6 +58,7 @@
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:id="@+id/text_layout_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
@@ -79,6 +84,7 @@
<!-- lecturers --> <!-- lecturers -->
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:id="@+id/text_layout_lecturers"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
@@ -103,6 +109,7 @@
<!-- room --> <!-- room -->
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:id="@+id/text_layout_room"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
@@ -126,12 +133,14 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.OutlinedButton"
android:id="@+id/button_day" android:id="@+id/button_day"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
app:icon="@drawable/edit_calendar" app:icon="@drawable/edit_calendar"
android:layout_gravity="end"/> android:layout_gravity="end"
app:strokeColor="?attr/colorOutlineVariant"/>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/button_academic_quarter" android:id="@+id/button_academic_quarter"
+30 -7
View File
@@ -11,14 +11,37 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"/> android:layout_gravity="center"/>
<TextView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/text_header" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="22sp" android:layout_marginBottom="8dp"
android:fontFamily="@font/lato_bolditalic" android:paddingHorizontal="24dp">
android:paddingHorizontal="24dp"
android:layout_marginBottom="8dp"/> <TextView
android:id="@+id/text_header"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="22sp"
android:fontFamily="@font/lato_bolditalic"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_cancel"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.Material3.Button.TextButton"
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
app:icon="@drawable/cross"
app:iconPadding="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:iconTint="?attr/colorOnSurfaceVariant"
android:layout_marginStart="16dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
+4 -4
View File
@@ -43,8 +43,8 @@
<string name="sheet_schedule_update_delete_confirm">Sicher?</string> <string name="sheet_schedule_update_delete_confirm">Sicher?</string>
<string name="cancel">Abbrechen</string> <string name="cancel">Abbrechen</string>
<string name="confirm">Bestätigen</string> <string name="confirm">Bestätigen</string>
<string name="sheet_schedule_update_header_edit">Veranstaltung bearbeiten</string> <string name="sheet_schedule_update_header_edit">Bestehende Veranstaltung bearbeiten</string>
<string name="sheet_schedule_update_header_add">Veranstaltung hinzufügen</string> <string name="sheet_schedule_update_header_add">Neue Veranstaltung hinzufügen</string>
<string name="sheet_schedule_update_title_hint">Veranstaltungstitel</string> <string name="sheet_schedule_update_title_hint">Veranstaltungstitel</string>
<string name="sheet_schedule_update_lecturers_hint">Dozierende(r)</string> <string name="sheet_schedule_update_lecturers_hint">Dozierende(r)</string>
<string name="sheet_schedule_update_room_hint">Raum</string> <string name="sheet_schedule_update_room_hint">Raum</string>
@@ -156,7 +156,7 @@
<string name="allergens_config_title">Verstecke Angebote mit bestimmten Allergenen</string> <string name="allergens_config_title">Verstecke Angebote mit bestimmten Allergenen</string>
<string name="allergens_config_subtitle">Angebote mit ausgeschlossenen Allergenen werden Dir nicht angezeigt</string> <string name="allergens_config_subtitle">Angebote mit ausgeschlossenen Allergenen werden Dir nicht angezeigt</string>
<string name="allergens_config_header">Wähle, welche Allergene Du vermeiden möchtest</string> <string name="allergens_config_header">Wähle, welche Allergene Du vermeiden möchtest</string>
<string name="allergens_config_content">Achtung: bitte verlasse Dich nicht vollständig auf diese Funktion. Stelle immer in der Mensa, die Du besuchst, sicher, dass die Stoffe, auf die Du allergisch reagierst, nicht in deren Angeboten vorhanden sind.</string> <string name="allergens_config_content">Achtung: bitte verlasse Dich nicht vollständig auf diese Funktion. Stelle immer in der Mensa, die Du besuchst, sicher, dass die Stoffe, auf die Du allergisch reagierst, nicht in deren Angeboten vorhanden sind. Die Allergen-Hinweise einiger Mensen sind online leider unvollständig.</string>
<string name="allergens_config_confirmation">Deine Allergene wurden gespeichert.</string> <string name="allergens_config_confirmation">Deine Allergene wurden gespeichert.</string>
<string name="settings_allergens_title">Markiere Angebote mit Allergenen mit einem Stern*</string> <string name="settings_allergens_title">Markiere Angebote mit Allergenen mit einem Stern*</string>
@@ -174,7 +174,7 @@
<string name="settings_data_title">Was passiert mit meinen Daten?</string> <string name="settings_data_title">Was passiert mit meinen Daten?</string>
<string name="settings_data_subtitle">Stiehlst du meinen Stud.IP-Login?</string> <string name="settings_data_subtitle">Stiehlst du meinen Stud.IP-Login?</string>
<string name="settings_data_sheet_header">TL;DR: nein, aber Google könnte mir Bescheid geben, falls die App mal abstürzt.</string> <string name="settings_data_sheet_header">TL;DR: nein, aber Google könnte mir Bescheid geben, falls die App mal abstürzt.</string>
<string name="settings_data_sheet_content">Die App funktioniert standalone, was bedeutet, dass sie sich niemals mit einem Server verbindet, der mir gehört. Sie ist ein Web-Scraper, also ein Programm, welches eine Internetseite öffnet und dann all die Informationen dieser Webseite herunterlädt und analysiert. In diesem Fall sind es die Webseiten der Mensen und Cafeterien des Studierendenwerks Bremen (stw-bremen.de) sowie die Stud.IP-Seite (elearning.uni-bremen.de).\n\nDies funktioniert relativ einfach für die Essenspläne, da diese Pläne öffentlich zugänglich sind. Um jedoch Deinen persönlichen Stud.IP-Stundenplan herunterzuladen, braucht die App Zugriff auf diese Webseite während Dein Account eingeloggt ist. Dies erfolgt, indem die App Dich mit deinem Account einloggen lässt - dies geschieht, wenn Du den Knopf zum Aktualisieren des Plans drückst und die App Dir die Login-Seite zeigt - und Du dann den Knopf klickst, um den Inhalt, den HTML-Quellcode, herunterzuladen. Der HTML-Quellcode beinhält Informationen darüber, was auf einer Webseite angezeigt wird und wie es aussehen soll, aber er kann niemals persönliche Details beinhalten, wie zum Beispiel Passwörter oder andere Daten, die auf Deinem Gerät vorhanden sind.\n\nDer Quellcode wird dann lokal, also auf Deinem Gerät, zu den Karten verarbeitet, die Du dann in der App sehen kannst, ohne, dass jegliche Daten irgendwohin geschickt werden müssten.\n\nEinige Daten könnten jedoch dennoch nach außen geschickt werden. Diese App nutzt \"Crashlytics\" von Google. Dies ist ein Tool, welches Absturzreporte an Google-Server schickt, wenn in der App etwas schief läuft. Diese werden genutzt, um Probleme in der App zu lösen.\n\nDies ist jedoch gemäß europäischer Datenschutz-Grundverordnung Opt-In, was bedeutet, dass Du zustimmen musst, bevor Daten nach außen geschickt werden. Du wurdest danach gefragt, als Du die App zum ersten Mal gestartet hast, und du kannst jederzeit deine Meinung ändern, indem Du den Schalter hierfür in den Einstellungen umstellst. Solltest Du dich entscheiden, keine Daten verschicken zu lassen, wird auch nichts mit Google (und mir) geteilt.\n\nSolltest du dich versichern wollen, dass wirklich keine Daten an irgendwelche Server verschickt wird (abgesehen von den Absturzreports an Google), kannst Du jederzeit das Projekt erkunden, da es Open-Source und auf meinen GitHub-Profil öffentlich zugänglich ist:\nhttps://github.com/denizk0461/studip-timetable/\n\nSchreib mir ansonsten gerne eine E-Mail:\ndenizk0461@gmail.com</string> <string name="settings_data_sheet_content">Die App funktioniert standalone, was bedeutet, dass sie sich niemals mit einem Server verbindet, der mir gehört. Sie ist ein Web-Scraper, also ein Programm, welches eine Internetseite öffnet und dann all die Informationen dieser Webseite herunterlädt und analysiert. In diesem Fall sind es die Webseiten der Mensen und Cafeterien des Studierendenwerks Bremen (stw-bremen.de) sowie die Stud.IP-Seite (elearning.uni-bremen.de).\n\nDies funktioniert relativ einfach für die Essenspläne, da diese Pläne öffentlich zugänglich sind. Um jedoch Deinen persönlichen Stud.IP-Stundenplan herunterzuladen, braucht die App Zugriff auf diese Webseite während Dein Account eingeloggt ist. Dies erfolgt, indem die App Dich mit deinem Account einloggen lässt - dies geschieht, wenn Du den Knopf zum Aktualisieren des Plans drückst und die App Dir die Login-Seite zeigt - und Du dann den Knopf klickst, um den Inhalt, den HTML-Quellcode, herunterzuladen. Der HTML-Quellcode beinhält Informationen darüber, was auf einer Webseite angezeigt wird und wie es aussehen soll, aber er kann niemals persönliche Details beinhalten, wie zum Beispiel Passwörter oder andere Daten, die auf Deinem Gerät vorhanden sind.\n\nDer Quellcode wird dann lokal, also auf Deinem Gerät, zu den Daten verarbeitet, die Du dann in der App sehen kannst, ohne, dass jegliche Daten irgendwohin geschickt werden müssten.\n\nEinige Daten welche nichts mit Deinen Stud.IP-Daten zu tun haben könnten jedoch dennoch nach außen geschickt werden. Diese App nutzt \"Crashlytics\" von Google. Dies ist ein Tool, welches Absturzreporte an Google-Server schickt, wenn in der App etwas schief läuft. Diese werden genutzt, um Probleme in der App zu lösen.\n\nDies ist jedoch gemäß europäischer Datenschutz-Grundverordnung Opt-In, was bedeutet, dass Du zustimmen musst, bevor Daten nach außen geschickt werden. Du wurdest danach gefragt, als Du die App zum ersten Mal gestartet hast, und du kannst jederzeit deine Meinung ändern, indem Du den Schalter hierfür in den Einstellungen umstellst. Solltest Du dich entscheiden, keine Daten verschicken zu lassen, wird auch nichts mit Google (und mir) geteilt.\n\nSolltest du dich versichern wollen, dass wirklich keine Daten an irgendwelche Server verschickt wird (abgesehen von den Absturzreports an Google), kannst Du jederzeit das Projekt erkunden, da es Open-Source und auf meinen GitHub-Profil öffentlich zugänglich ist:\nhttps://github.com/denizk0461/studip-timetable/\n\nSchreib mir ansonsten gerne eine E-Mail:\ndenizk0461@gmail.com</string>
<string name="settings_licences_title">Siehe Lizenzen</string> <string name="settings_licences_title">Siehe Lizenzen</string>
<string name="settings_licences_subtitle">Ressourcen, die diese App möglich gemacht haben</string> <string name="settings_licences_subtitle">Ressourcen, die diese App möglich gemacht haben</string>
+6 -5
View File
@@ -43,8 +43,8 @@
<string name="sheet_schedule_update_delete_confirm">Sure?</string> <string name="sheet_schedule_update_delete_confirm">Sure?</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="confirm">Confirm</string> <string name="confirm">Confirm</string>
<string name="sheet_schedule_update_header_edit">Edit event</string> <string name="sheet_schedule_update_header_edit">Edit existing event</string>
<string name="sheet_schedule_update_header_add">Add event</string> <string name="sheet_schedule_update_header_add">Add new event</string>
<string name="sheet_schedule_update_title_hint">Event title</string> <string name="sheet_schedule_update_title_hint">Event title</string>
<string name="sheet_schedule_update_lecturers_hint">Lecturer(s)</string> <string name="sheet_schedule_update_lecturers_hint">Lecturer(s)</string>
<string name="sheet_schedule_update_room_hint">Room</string> <string name="sheet_schedule_update_room_hint">Room</string>
@@ -160,7 +160,7 @@
<string name="allergens_config_title">Hide offers containing certain allergens</string> <string name="allergens_config_title">Hide offers containing certain allergens</string>
<string name="allergens_config_subtitle">Offers with excluded allergens won\'t be shown to you</string> <string name="allergens_config_subtitle">Offers with excluded allergens won\'t be shown to you</string>
<string name="allergens_config_header">Select which allergens you\'d like to avoid</string> <string name="allergens_config_header">Select which allergens you\'d like to avoid</string>
<string name="allergens_config_content">Note: please don\'t entirely rely on this. Always check the notices displayed at the canteen you\'re visiting to confirm substances you may be allergic against are not present in their offerings.</string> <string name="allergens_config_content">Note: please don\'t entirely rely on this. Always check the notices displayed at the canteen you\'re visiting to confirm substances you may be allergic against are not present in their offerings. Some canteens unfortunately don\'t provide full allergen information online.</string>
<string name="allergens_config_confirmation">Your allergen settings have been saved.</string> <string name="allergens_config_confirmation">Your allergen settings have been saved.</string>
<string name="settings_allergens_title">Mark offers with allergens with a star*</string> <string name="settings_allergens_title">Mark offers with allergens with a star*</string>
@@ -178,7 +178,7 @@
<string name="settings_data_title">What happens with my data?</string> <string name="settings_data_title">What happens with my data?</string>
<string name="settings_data_subtitle">Will you steal my Stud.IP login?</string> <string name="settings_data_subtitle">Will you steal my Stud.IP login?</string>
<string name="settings_data_sheet_header">TL;DR: no, but Google may let me know if the app crashes on your device.</string> <string name="settings_data_sheet_header">TL;DR: no, but Google may let me know if the app crashes on your device.</string>
<string name="settings_data_sheet_content">This app works standalone, which is to say, it doesn\'t ever connect to a server I own. Instead, it is a web scraper, which means that it opens a website and then downloads and analyses all the data from that website by itself. In this case, those websites are the canteen websites of the Studierendenwerk Bremen (stw-bremen.de) and the Stud.IP page (elearning.uni-bremen.de).\n\nThis works fairly easily for the canteen offers, since the plans are public and anyone can access them. However, to access your personal Stud.IP schedule, the app needs access to that website, with your account logged in. This is done by letting you log into the website by yourself (which happens when you click the button to refresh the schedule and the app opens the login page) and then clicking a button to download the content, the HTML source code, of the website. The HTML source code contains information about which elements are shown on the website and how they look, but it can never contain your personal details such as passwords, or any other sensitive data you may store on your device.\n\nThe HTML source is then processed locally on your device, which means that your device will handle converting the HTML source to the cards you will be shown in the app by itself, without needing to send any data anywhere.\n\nHowever, some data may still be sent outside of your device. This app uses \"Crashlytics\" by Google, which is a tool that sends crash reports to Google servers if something breaks. These are used to fix problems that occur in the app.\n\nThis, in compliance with the European General Data Protection Regulation, is of course opt-in, which means that you need to accept this before any data is sent outside of your device. You have been prompted for this when you first started the app, and you can always change your mind in the app settings by clicking the corresponding switch. Should you choose to not share crash data with Google (and me), no data will be sent outside of your device.\n\nShould you want to reassure yourself that no data is sent to any servers (outside of the crash reports from Google), feel free to explore the project, since it is open-source and documented on my GitHub profile:\nhttps://github.com/denizk0461/studip-timetable/\n\nYou\'re also welcome to send me an email:\ndenizk0461@gmail.com</string> <string name="settings_data_sheet_content">This app works standalone, which is to say, it doesn\'t ever connect to a server I own. Instead, it is a web scraper, which means that it opens a website and then downloads and analyses all the data from that website by itself. In this case, those websites are the canteen websites of the Studierendenwerk Bremen (stw-bremen.de) and the Stud.IP page (elearning.uni-bremen.de).\n\nThis works fairly easily for the canteen offers, since the plans are public and anyone can access them. However, to access your personal Stud.IP schedule, the app needs access to that website, with your account logged in. This is done by letting you log into the website by yourself (which happens when you click the button to refresh the schedule and the app opens the login page) and then clicking a button to download the content, the HTML source code, of the website. The HTML source code contains information about which elements are shown on the website and how they look, but it can never contain your personal details such as passwords, or any other sensitive data you may store on your device.\n\nThe HTML source is then processed locally on your device, which means that your device will handle converting the HTML source to the data you will be shown in the app by itself, without needing to send any data anywhere.\n\nHowever, some data which has nothing to do with your Stud.IP data may still be sent outside of your device. This app uses \"Crashlytics\" by Google, which is a tool that sends crash reports to Google servers if something breaks. These are used to fix problems that occur in the app.\n\nThis, in compliance with the European General Data Protection Regulation, is of course opt-in, which means that you need to accept this before any data is sent outside of your device. You have been prompted for this when you first started the app, and you can always change your mind in the app settings by clicking the corresponding switch. Should you choose to not share crash data with Google (and me), no data will be sent outside of your device.\n\nShould you want to reassure yourself that no data is sent to any servers (outside of the crash reports from Google), feel free to explore the project, since it is open-source and documented on my GitHub profile:\nhttps://github.com/denizk0461/studip-timetable/\n\nYou\'re also welcome to send me an email:\ndenizk0461@gmail.com</string>
<string name="settings_licences_title">View licences</string> <string name="settings_licences_title">View licences</string>
<string name="settings_licences_subtitle">Resources that made this app possible</string> <string name="settings_licences_subtitle">Resources that made this app possible</string>
@@ -197,10 +197,11 @@
<string name="with_love">with ♡️ from Bremen-Osterholz\nmade by denizk0461 \\__*</string> <string name="with_love">with ♡️ from Bremen-Osterholz\nmade by denizk0461 \\__*</string>
<string-array name="cheesy" translatable="false"> <string-array name="cheesy_wisdoms" translatable="false">
<item>it\'s only real when it hurts</item> <item>it\'s only real when it hurts</item>
<item>can\'t go back in time, every second is a new one</item> <item>can\'t go back in time, every second is a new one</item>
<item>if we only had one more day, what is the last thing you\'d say?</item> <item>if we only had one more day, what is the last thing you\'d say?</item>
<item>love with your heart, use your head for everything else</item> <item>love with your heart, use your head for everything else</item>
<item>trans rights are human rights 🏳️‍⚧️</item>
</string-array> </string-array>
</resources> </resources>