Giter Club home page Giter Club logo

eventfahrplan's Introduction

Travis CI Build Status GitHub Actions Build Status Crowdin Apache License

EventFahrplan

EventFahrplan is a viewer for event schedules such as Chaos Computer Club e.V. events like Chaos Communication Camp, Chaos Communication Congress or JahresEndVeranstaltungen.

The app is available for Android devices.

Bug reports, feature requests can be submitted as an issue. Please read the instructions in the contribution guide in order to contribute to this project.

Picture of the Camp2023 Schedule on tablet and phone

Table of contents

Features

  • View program by day and rooms (side by side)
  • Custom grid layout for smartphones (try landscape mode) and tablets
  • Read detailed descriptions (speaker names, start time, room name, links, ...) of events
  • Add events to favorites list
  • Export favorites list
  • Setup alarms for individual events
  • Add events to your personal calendar
  • Share a link to an event with others
  • Keep track of program changes
  • Automatic program updates (configurable in settings)

Supported languages

Event descriptions excluded

  • Danish 🇩🇰
  • Dutch 🇳🇱
  • English 🇺🇸
  • Finnish 🇫🇮
  • French 🇫🇷
  • German 🇩🇪
  • Italian 🇮🇹
  • Japanese 🇯🇵
  • Lithuanian 🇱🇹
  • Polish 🇵🇱
  • Portuguese 🇵🇹
  • Russian 🇷🇺
  • Spanish 🇪🇸
  • Swedish 🇸🇪
  • Turkish 🇹🇷

Optional integration

  • The feedback system of Frab and Pretalx
  • c3nav - An indoor navigation project
  • Engelsystem - Online tool for coordinating helpers and shifts at large events
  • Chaosflix - Android app for media.ccc.de, share Fahrplan favorites with Chaosflix to import them as bookmarks

Android versions

The application is designed to work on both smartphones and on tablets. Android 5.0 (Lollipop) and newer versions are supported.

Event data

  • The app is designed to consume event data published in a specific format as provided by Frab, Pretalx or Wafer. The file format produced by the predecessor software, Pentabarf, cannot be consumed out of the box.
  • In general, it is possible to re-deploy the app for other events which provide the same event file format.

Build instructions

To begin development, open the project in Android Studio.

The customization guide explains in detail how to create an app for your event.

If you want to create your own signed release builds, copy the gradle.properties.example file in the app folder and rename it to gradle.properties. This file contains the signing information which is used in the build process. Be sure to edit the contents of the file to point to your own keystore files.

Translations

Text translations are managed on Crowdin. Contributions are welcome!

Sources (English) and translations are synchronized via the Crowdin CLI tool. German is excluded from being managed on Crowdin as long as the maintainer is a native German speaker. New languages must be configured in the Crowdin configuration file crowdin.yaml before translations can be downloaded. The file also contains usage examples.

History

  • The project was started in 2011 as "CampFahrplan" and was developed by Daniel Dorau. He released the app for the Chaos Communication Camp and the Chaos Communication Congress in the following years. The app served as a digital schedule for thousands of users.
  • In 2013, Tobias Preuss started contributing. Soon after he started to re-deploy the app for other events like FOSSGIS, FrOSCon, MRMCD and other conferences.
  • In August 2017 the project moved to a new location and was renamed to "EventFahrplan" to acknowledge its broader use.

Funding

In 2023 & 2024, this project was funded by the NGI0 Entrust Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program, under the aegis of DG Communications Networks, Content and Technology under grant agreement No. 101069594.

Logo NLnet: abstract logo of four people seen from above

Logo NGI Zero: letterlogo shaped like a tag

Licenses

Portions Copyright 2008-2011 The K-9 Dog Walkers and 2006-2011 the Android Open Source Project.

Copyright 2013-2024 johnjohndoe
Copyright 2011-2015 Daniel Dorau
Contributions from 0x5ubt13, Adriano Pereira Junior, Akarsh Seggemu,
Александр Рознятовский, aligoush, Andrea Marziali, Andy Scherzinger,
Andreas Schildbach, Animesh Verma, bashtian, bjoernb, Björn Olsson Jarl,
ButterflyOfFire, cacarrara, Caio Volpato, Chase, cketti, codingcatgirl,
Dominik Stadler, entropynil, erebion, ideadapt, isi_ko404, IsoLinearCHiP,
Jasper van der Graaf, Joergi, Julius Vitkauskas, koelnkalkverbot, Larissa Yasin,
lepawa, ligi, lucadelu, Luis Azcuaga, María Arias de Reyna, Mateus Baptista,
Matthias Geisler, Matthias Hunstock, Matthias Mair, MichaelRocks, Miguel Beltran,
mtpa, Nghiem Xuan Hien, NiciDieNase, Noemis, Omicron, Poschi, Qwertele,
Róbert Papp,rotrot, Sjors van Mierlo, Stefan Medack, SubOptimal, taseret,
Teeranai.P, Torsten Grote, Victor Herasme, Vladimir Alabov, Yanicka

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

eventfahrplan's People

Contributors

adrianoapj avatar akarsh avatar aniverma17 avatar bashtian avatar bitpogo avatar boffire avatar centic9 avatar cketti avatar grote avatar hiennghiem avatar ideadapt avatar imgbotapp avatar isiko avatar joergi avatar johnjohndoe avatar koelnkalkverbot avatar ligi avatar luisazcuaga avatar matmair avatar minibugdev avatar n0emis avatar nwuensche avatar omicron321 avatar poschi3 avatar rotsq avatar sjorsvanmierlo avatar suboptimal avatar tuxmobil avatar twisterrob avatar yanicka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eventfahrplan's Issues

Migrate database(s) to Room

Current state

  • Four separate databases are used to store lectures, meta, alarms, highlights (aka. favorites).
  • Databases are accessed via custom classes extending SQLiteOpenHelper.
  • SQL code fragments is spread throughout the applications.
  • Inter-table logic is implemented programmatically not on the database level due to separate databases.
  • No unit tests.

Target state

  • Encapsulate database within its own Android Studio module.
  • Provide abstraction layer (repository) to access the database module.
  • One database is used.
  • Database is accessed via Room.
  • Foreign keys are used to persist inter-table logic.
  • Repository pattern is used to layer access to the data source (database, ...).
  • Data source is unit tested.

Favorite items with yellow background are difficult to read

Hi,
in version 1.33.1, events with a yellow-ish background become hard to read, when added to favorites (white text on a bright yellow background).
Items in all other colors are easy to read.

See the attachment; I'm using a Nexus 5x.

image

Multiple push notifications for single schedule update

During MRMCD17, I received multiple push notifications for any single schedule update. The first notification would display the correct changes. Every following notification would display "0 changes".

System:

  • OS: Android 6.0
  • Manufacturer / Model: LG G4 H815

Very sensitive swiping in portrait mode

When using the app in portrait orientation the swiping gesture to move to the next/previous room is very slow. This leads to usually swiping too fast and switching all the way to the first/last room.

System:
Nexus 5X
LineageOS 14.1, Android 7.1.2

Version:
1.33.0

Download selected talks from media.ccc.de

Once you've chose the talks you want to attempt, it looks straight forward to be asked which talks you really attended.

Then, a common usage I noticed during the 34c3 is to spend time each of the last days of the event to download the talks you wanted to be in, but missed… So what about downloading All selected talks or All missed talks from the EventFahrplan app directly on your phone ? (to watch the talks later, for instance in the return train).

Unique favorites in backstack

Currently, the favorites fragment can be added more then once to the backstack.

How to reproduce

  1. Open favorites from the toolbar menu
  2. Open any event details by clickling on an event
  3. Open favorites from the overflow menu
  4. Press back to pop the favorites and see the event details again
  5. Press back again

Observed behavior

  • Favorites are shown

Expected behavior

  • Full schedule is shown, event details are closed

TraceDroid-1.1.jar prevents F-Droid inclusion

F-Droid doesn't allow arbitrary jar files in the source tree, because it needs to ensure that the source code for the entire app is available and free.

It seems that TraceDroid-1.1.jar is coming from https://github.com/ligi/tracedroid

Why don't you simply include it like this instead of using a jar?

dependencies {
    compile 'org.ligi:tracedroid:1.4'
}

F-Droid app not up to date

Is it possible to get the F-Droid app in sync with the playstore app on android so it shows the small rooms as well?

[Feature] Allow rating of talks from within the app

During the congress, we are encouraged to rate the talks. Right now, this seems to only be possible via the link provided on https://events.ccc.de/, but not natively from inside the app.
Unfortunately, rating via the web site is pretty clunky and not optimized for mobile.
Would it be possible to add this feature?

NullPointerException in UpdateService.onParseDone

Crash report from a user:

  • sent: 20.10.2017
  • 1.33.0 (Datenspuren Edition)
  • Android version: 4.4.2
  • Device model: CHC-U01

Stacktrace

java.lang.NullPointerException
  at nerd.tuxmobil.fahrplan.congress.autoupdate.UpdateService.onParseDone(UpdateService.java:58)
  at nerd.tuxmobil.fahrplan.congress.serialization.ParserTask.notifyActivity(FahrplanParser.java:127)
  at nerd.tuxmobil.fahrplan.congress.serialization.ParserTask.onPostExecute(FahrplanParser.java:136)
  at nerd.tuxmobil.fahrplan.congress.serialization.ParserTask.onPostExecute(FahrplanParser.java:72)
  at android.os.AsyncTask.finish(AsyncTask.java:632)
  ...

Log

0 D: Writing unhandled exception to: /data/data/info.metadude.android.datenspuren.schedule/
    files/1.33.0 (Datenspuren Edition)-1508507371820.tracedroid
1 D: current handler class=com.android.internal.os.RuntimeInit$UncaughtHandler

Error prone data type definition "STRING" for database columns

Problem

Currently, some database columns such as for the "lectures" table define the data type "STRING". This is not a native SQLite data type. By the rules of column affinity this is mapped into the storage class "NUMERIC".

Screenshot of the Database Inspector in Android Studio 4.1+

Error scenario

In the following scenario this behavior causes an error. Given there is a room named "008" and this information is stored in a database column typed as "STRING" the room name value becomes 8. When the schedule is updated the old and new room names are compared. Due to loosing the leading zeros this lecture is always marked as changed, falsely.

Recommended solutions

  • For updates of existing apps the specific column types should be altered via database migrations.
  • For new apps all column types defined as "STRING" should be changed to "TEXT".

⬅️ This issue has been migrated from here: tuxmobil/CampFahrplan#178

DeadSystemException in ConnectivityManager.getActiveNetworkInfo

Crash report from a user:

  • sent: 28.12.2017
  • 1.33.1
  • Android version: 7.1.2
  • Device model: GT-I9195

Stacktrace

java.lang.RuntimeException: android.os.DeadSystemException
at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:772)
at nerd.tuxmobil.fahrplan.congress.autoupdate.UpdateService.onHandleIntent(UpdateService.java:154)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: android.os.DeadSystemException
... 6 more

Log

0 D: Writing unhandled exception to: /data/user/0/info.metadude.android.congress.schedule/
    files/1.33.1-1514438261282.tracedroid
1 D: current handler class=com.android.internal.os.RuntimeInit$UncaughtHandler

Related

Icons for time, place, identifier in event details

The status bar at the top of the detail screen shows the time, place and identifier of an event as show in the screenshot:

eventdetails

TODOs

  • Add meaningful and clear icons for each element.
  • Icons must be vector drawables, based on SVG.
  • Define custom colors for ccc35c3 and cccamp2019 flavors.
  • Test with long room names
  • Test on device/emulator running Android 4.0 (API level 14) and Android 10 (API level 29).

Feature: Add favourites to calendar

At least for angels it was nice if there was an iCal export for the system calendar. Then you could add your shifts and favourite talks to the calendar an immediately see collisions. If you could subscribe to your favourites (in order to get updates) this was even better.

Readability art&culture overview type

Hello there
In the overview, could you please change white on yellow to a more readable black on yellow or switch to a different BG color?
Not really good to read on OnePlus 5 and other bright screens.

NullPointerException in FahrplanMisc.loadLecturesForDayIndex()

Crash report from a user:

  • sent: 19.12.2017
  • 34C3, v.1.33.0
  • Android version: 4.4.2
  • Device model: SM-T320
  • TraceDroid version: 1.1

User action

Last night I started selecting talks. This morning I continued: When I long-pressed on the first talk this morning, the app crashed. I cannot reproduce it.

Stacktrace

java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
at nerd.tuxmobil.fahrplan.congress.utils.FahrplanMisc.loadLecturesForDayIndex(FahrplanMisc.java:466)
at nerd.tuxmobil.fahrplan.congress.utils.FahrplanMisc.loadLecturesForAllDays(FahrplanMisc.java:450)
at nerd.tuxmobil.fahrplan.congress.utils.FahrplanMisc.getStarredLectures(FahrplanMisc.java:662)
at nerd.tuxmobil.fahrplan.congress.favorites.StarredListFragment.onRefresh(StarredListFragment.java:172)
at nerd.tuxmobil.fahrplan.congress.schedule.MainActivity.refreshFavoriteList(MainActivity.java:508)
at nerd.tuxmobil.fahrplan.congress.schedule.FahrplanFragment.onContextItemSelected(FahrplanFragment.java:1076)
at android.support.v4.app.Fragment.performContextItemSelected(Fragment.java:2502)
at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:3319)
at android.support.v4.app.FragmentController.dispatchContextItemSelected(FragmentController.java:357)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:377)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108)
at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4317)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:204)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:954)
at android.widget.AdapterView.performItemClick(AdapterView.java:308)
at android.widget.AbsListView.performItemClick(AbsListView.java:1478)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3480)
at android.widget.AbsListView$3.run(AbsListView.java:4823)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5377)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)

Log

0 D: Writing unhandled exception to: /data/data/info.metadude.android.congress.schedule/
    files/1.33.0-1513671142002.tracedroid
1 D: current handler class=com.android.internal.os.RuntimeInit$UncaughtHandler

Tag sessions

  • The following feature replaces the existing favorites feature of the app.

Implementation hints

  • The implementation can be split into functionality (persistence, model, ..) and UI while the latter should be merged last.
  • Further certain parts of the feature such as the tabbed list can be down separately once the basic functionality is implemented.

As a user I want to mark an event with different tags. The list of tags must be extendable.
A few predefined tags might be:

  • "favorite" or "want to go"
  • "watch later" when the recording of the event will be available
  • "uninteresting"
  • "attended"

Schedule view

  • All events are shown
  • Each event shows the tags as symbols
  • Events tagged as uninteresting are less visible (the event with the thumb down icon)

events

Long-press

  • By long-pressing an event a modal dialog appears where users can quickly assign tags or create a new one.
  • Beside the tag actions there are the already existing actions. It might be helpful if the tags action are somehow grouped visually.

modal

Event details

  • The side pane shows event details and the tags

event

Tags

  • The side pane shows all tags in a tab list and tagged the events

tags

Wrong day as default

Everytime I open the App, I see day one as default. That's not a good idea on day 2 and later.

Detach repo

Can you please detach this repo from the not maintained fork?

You can this either do it manually or – which I recommend – just contact the GitHub support to do it for you.

This…

  1. shows that this is a real maintained project and not just a repo of someone who (once) made a pull request
  2. linking to the original repo on every page does not make sense anymore as it has been discontinued/is not maintained anymore and you…
  3. can (and IMHO should) still link to the original repo/website/author/… for crediting them, but you can do so in better ways (in the Readme, wiki or so)
  4. allows searching in this repo on GitHub and
  5. it just looks much nicer

Remove unneeded whitespace on favorites screen

The favorites screen has a lot of white space as indicated in the following screenshot:

Favorites

The whitespace happens to be there when no text for the abstract has been provided.
Remove unneeded white space.

NullPointerException in FahrplanMisc.addAlarm

Crash report from a user:

  • Sent: 29.12.2017
  • App version: 1.33.1
  • Android version: 6.0.1
  • Device model: MotoG3

Stacktrace

java.lang.NullPointerException: Attempt to invoke virtual method 
    'android.content.res.Resources android.content.Context.getResources()' 
    on a null object reference
at nerd.tuxmobil.fahrplan.congress.utils.FahrplanMisc.addAlarm(FahrplanMisc.java:285)
at nerd.tuxmobil.fahrplan.congress.details.EventDetailFragment.onAlarmTimesIndexPicked(EventDetailFragment.java:336)
at nerd.tuxmobil.fahrplan.congress.details.EventDetailFragment.onActivityResult(EventDetailFragment.java:322)
at nerd.tuxmobil.fahrplan.congress.alarms.AlarmTimePickerFragment.passBackAlarmTimesIndex(AlarmTimePickerFragment.java:86)
at nerd.tuxmobil.fahrplan.congress.alarms.AlarmTimePickerFragment.access$000(AlarmTimePickerFragment.java:24)
at nerd.tuxmobil.fahrplan.congress.alarms.AlarmTimePickerFragment$1.onClick(AlarmTimePickerFragment.java:60)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

Log

0 D: Writing unhandled exception to: /data/user/0/info.metadude.android.congress.schedule/
    files/1.33.1-1514566377306.tracedroid
1 D: Add alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@a1b67cc2, alarmTimesIndex: 2
2 D: onReceive: lecture_id: 8994, intent: Intent { 
    act=nerd.tuxmobil.fahrplan.congress.ALARM_LECTURE dat=alarm://8994 flg=0x14 
    cmp=info.metadude.android.congress.schedule/
nerd.tuxmobil.fahrplan.congress.alarms.AlarmReceiver (has extras) }
3 D: onReceive: lecture_id: 9036, intent: Intent { 
    act=nerd.tuxmobil.fahrplan.congress.ALARM_LECTURE dat=alarm://9036 flg=0x14 
    cmp=info.metadude.android.congress.schedule/
    nerd.tuxmobil.fahrplan.congress.alarms.AlarmReceiver (has extras) }
4 D: onReceive: lecture_id: 8923, intent: Intent { 
    act=nerd.tuxmobil.fahrplan.congress.ALARM_LECTURE dat=alarm://8923 flg=0x14 
    cmp=info.metadude.android.congress.schedule/
    nerd.tuxmobil.fahrplan.congress.alarms.AlarmReceiver (has extras) }
5 D: onReceive: lecture_id: 8989, intent: Intent { 
    act=nerd.tuxmobil.fahrplan.congress.ALARM_LECTURE dat=alarm://8989 flg=0x14 
    cmp=info.metadude.android.congress.schedule/
    nerd.tuxmobil.fahrplan.congress.alarms.AlarmReceiver (has extras) }
6 D: Add alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@81595055, alarmTimesIndex: 2
7 D: Add alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@32a49f74, alarmTimesIndex: 2
8 D: onReceive: lecture_id: 9105, intent: Intent { 
    act=nerd.tuxmobil.fahrplan.congress.ALARM_LECTURE dat=alarm://9105 flg=0x14 
    cmp=info.metadude.android.congress.schedule/
    nerd.tuxmobil.fahrplan.congress.alarms.AlarmReceiver (has extras) }
9 D: Delete alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@50fda683
10 D: Add alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@50fda683, alarmTimesIndex: 2
11 D: Add alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@18494e13, alarmTimesIndex: 2
12 D: Add alarm for lecture: nerd.tuxmobil.fahrplan.congress.models.Lecture@565ce3e9, alarmTimesIndex: 2
13 D: current handler class=com.android.internal.os.RuntimeInit$UncaughtHandler

User report

It crashed when I was switching back to the app from another app. AFAIR a talk's page was open before, not the schedule view. AFAIR I hadn't opened it for some time (>1h?). Wifi was off, used mobile data.
Switching back and forth didn't provoke it again. Has run stable since.

Related issues

  • Issue #18 appears to be related.

Incomplete time column when switching to day 1

It is 22:35, day 3 and I am browsing the talks on day 3. When I switch to day 1, the time line on the left side ends at 19:15. All the talks are displayed but after 19:15 no time.
It does not matter if I switch from day 2 or day 4 to day 1, the problem always occurs on day 1. No other day seems to have this problem. Landscape/Portrait makes no difference.

  • App version 1.33.3
  • Samsung T320 Tablet
  • Android 4.4.2

screenshot_2017-12-30-08-58-39

Select current day by default

I would like the app to select the current day by default. At the moment the app opens alsways with day one selected.

Stay at current scroll position when going back from event details view

It is really beneficial for the normal user workflow to stay at the current scroll position.

At the moment, the app always scrolls back to the current time and the user has to scroll all the way down again.

Many users go through the schedule and try to decide which lectures/talks to go to.

Enviroment

  • Device vendor: Lenovo/ZUK
  • Device model: ZUK Z1 (Smartphone)
  • Android version: 5.1.1
  • Cyanogen version: 12.1-YOG4PAS9IG
  • App version: 1.33.1

How to reproduce

  1. Start the app, navigate to the main view (if necessary)
  2. Scroll up or down and tap on a talk to see it's details.
  3. Tap the back-button.
  4. You are now at the current time again, not where you initially scrolled to.

Also the following Developer Options were customized

  • Window Animation Scale: Off
  • Transition Animation Scale: Off
  • Animation Duration Scale: Off

Clickable email and web addresses

Session texts can contain email and web addresses. Make them clickable.
Web addresses might not be prefixed with http:// or https://.

Pretalx

When session texts originate from Pretalx then authors have the option use Markdown to format text. See screenshot:

image

The XML then looks like this:

<event id="25" guid="a18948d8-236b-5ca8-87d7-befe7d1c3c3c">
	<logo/>
	<date>2021-04-03T12:20:00+02:00</date>
	<start>12:20</start>
	<duration>00:45</duration>
	<room>Piscopia</room>
	<slug>divoc-reboot-to-respawn-2021-25-state-of-eventfahrplan-2021</slug>
	<url>https://pretalx.c3voc.de/divoc-reboot-to-respawn-2021/talk/9E8ZNZ/</url>
	<title>State of EventFahrplan 2021</title>
	<subtitle/>
	<track>Other</track>
	<type>Talk/Performance (30 minutes plus Q&A)</type>
	<language>en</language>
	<abstract>Let's have a retrospective of what happened in the EventFahrplan project in the last months and what is planned.</abstract>
	<description>[EventFahrplan](https://github.com/EventFahrplan/EventFahrplan) is the project behind a couple of apps for Android which you might already have used at Remote Chaos Experience (rC3), Chaos Communication Congress (3xC3), Chaos Communication Camp, [DiVOC](https://play.google.com/store/apps/details?id=info.metadude.android.divoc.schedule), MRMCD, FrOSCon, GPN, Datenspuren, FIfFKon, FOSDEM, FOSSGIS and other events. ...</description>
	<recording>
	<license/>
	<optout>false</optout>
	</recording>
	<persons>
		<person id="47">tbsprs</person>
	</persons>
	<links/>
	<attachments/>
	<answers/>
</event>

If used correctly then links show up correctly. If a plain link is added to the text then the app shows the link as is but not clickable.

Frab

  • Session data is output as plain text.
<event guid="3aae5c0a-9c9b-483a-8c09-b4402d749a82" id="11220">
	<date>2019-12-27T11:30:00+01:00</date>
	<start>11:30</start>
	<duration>01:00</duration>
	<room>Ada</room>
	<slug>36c3-11220-the_case_for_scale_in_cyber_security</slug>
	<url>https://fahrplan.events.ccc.de/congress/2019/Fahrplan/events/11220.html</url>
	<recording>
		<license/>
		<optout>false</optout>
	</recording>
	<title>The Case for Scale in Cyber Security</title>
	<subtitle>Security Track Keynote</subtitle>
	<track>CCC</track>
	<type>lecture</type>
	<language>en</language>
	<abstract>The impact of scale in our field has been enormous and it has transformed the tools, the jobs and the face of the Infosec community. In this talk we discuss some of the ways in which defense has benefitted from scale, how the industry might be transitioning to a new phase of its growth and how the community will have to evolve to stay relevant.</abstract>
	<description/>
	<logo/>
	<persons>
		<person id="9846">Vincenzo Iozzo</person>
	</persons>
	<links/>
	<attachments/>
</event>

Pentabarf

  • Session data is output with escaped HTML elements.
<event id="11795">
  <start>09:00</start>
  <duration>00:25</duration>
  <room>K.fosdem</room>
  <slug>keynotes_welcome</slug>
  <title>Welcome to FOSDEM 2021</title>
  <subtitle/>
  <track>FOSDEM</track>
  <type>maintrack</type>
  <language/>
  <abstract>&lt;p&gt;FOSDEM welcome and opening talk.&lt;/p&gt;</abstract>
  <description>&lt;p&gt;Welcome to FOSDEM 2021!&lt;/p&gt;</description>
  <persons>
  </persons>
  <attachments>
  </attachments>
  <links>
    <link href="https://video.fosdem.org/2021/K.fosdem/keynotes_welcome.webm">Video recording (WebM/VP9)</link>
    <link href="https://video.fosdem.org/2021/K.fosdem/keynotes_welcome.mp4">Video recording (mp4)</link>
    <link href="https://submission.fosdem.org/feedback/11795.php">Submit feedback</link>
  </links>
</event>

Related

Day selection lost on rotation (> Android 6.0)

  • This issue was already reported by @NinoV and a first fix can be found in ligi/CampFahrplan#8.
  • I could narrow the problem down: it only occurs on devices running Android 7.0 or Android 8.0.

How to reproduce

  1. Select day three
  2. Rotate device

Observed behavior

  • Day one is selected
  • Reproduced on Android 8.0

rotation-android-8 0

Expected behavior

  • Day three is still selected
  • Reproduced on Android 6.0

rotation-android-6 0

NullPointerException in FahrplanFragment.onAlarmTimesIndexPicked

Environment

  • v.1.33.0 ... v.1.56.1

How to reproduce

  1. Long tap any event
  2. Select "Set alarm" option
  3. Leave "Choose alarm time" dialog and rotate the device
  4. Tap the "OK" button

"Choose alarm time" dialog

Expected behavior

  • "Choose alarm time" dialog closes

Observed behavior

  • Application crashes

Stacktrace

java.lang.NullPointerException: Lecture is null.
    at nerd.tuxmobil.fahrplan.congress.schedule.FahrplanFragment.onAlarmTimesIndexPicked(FahrplanFragment.java:1048)
    at nerd.tuxmobil.fahrplan.congress.schedule.FahrplanFragment.onActivityResult(FahrplanFragment.java:1033)
    at nerd.tuxmobil.fahrplan.congress.alarms.AlarmTimePickerFragment.passBackAlarmTimesIndex(AlarmTimePickerFragment.java:86)
    at nerd.tuxmobil.fahrplan.congress.alarms.AlarmTimePickerFragment.access$000(AlarmTimePickerFragment.java:24)
    at nerd.tuxmobil.fahrplan.congress.alarms.AlarmTimePickerFragment$1.onClick(AlarmTimePickerFragment.java:60)
    at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
...

Allow force tablet mode

The tablet mode (splitted with calendar + event view) could be great also on smartphone.
A settings togglebutton could force the mode.

Show scrollbars

The different views (details, favorites, changes*) are scrollable but do not show scrollbars when users scroll. The alarms screen shows scrollbars.

*not verified yet.

Current time marker disappears after midnight

Today (day 1) I was browsing through the talks on the first day. The current time is marked on the left side, but after midnight it disappears. When I switch to day 2, I see the current time is marked there.

Don't show identical texts twice

Current status

  • An event can be described by the authors via two sections of text: abstract and description.
  • In some cases authors simply write on text and copy parts or the whole texts into the other section.
  • This causes that the same text shows up twice in the app. As a user I don't want to read the same text twice.

Target status

  • Identical text paragraphs in the abstract and description texts are identified.
  • The abstract text is removed if it matches the description text.

SSLHandshakeException / SSLProtocolException: handshake aborted: Failure in SSL library, usually a protocol error (Android 4)

Environment

  • Android 4.1.2
  • Samsung GT-I8190

How to reproduce

  1. Install Datenspuren v.1.33.0-Datenspuren-Edition app (DEBUG or RELEASE)
  2. Start app
  3. SSL certficate dialog is shown

Expected behavior

  • SSL dialog can be confirmed. Data is fetched.

Observed behavior

  • Failure dialog reappears on confirmation.

Dialog SSL handshake aborted

Stacktrace

W  javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: 
    SSL handshake aborted: ssl=0x40e83050: Failure in SSL library, usually a protocol error
W  error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version 
    (external/openssl/ssl/s23_clnt.c:741 0x40e0276a:0x00000000)
W      at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:412)
W      at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:299)
W      at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:268)
W      at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:160)
W      at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:256)
W      at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134)
W      at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113)
W      at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
W      at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
W      at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W      at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W      at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
W      at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
W      at okhttp3.RealCall.execute(RealCall.java:77)
W      at nerd.tuxmobil.fahrplan.congress.net.FetchFahrplanTask.fetch(FetchFahrplan.java:142)
W      at nerd.tuxmobil.fahrplan.congress.net.FetchFahrplanTask.doInBackground(FetchFahrplan.java:93)
W      at nerd.tuxmobil.fahrplan.congress.net.FetchFahrplanTask.doInBackground(FetchFahrplan.java:58)
W      at android.os.AsyncTask$2.call(AsyncTask.java:287)
W      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W      at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W      at java.lang.Thread.run(Thread.java:856)

W  Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x40e83050: 
    Failure in SSL library, usually a protocol error
W  error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version 
    (external/openssl/ssl/s23_clnt.c:741 0x40e0276a:0x00000000)
W      at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
W      at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
W      ... 29 more

Use white textcolours for dark background colours

Improve readability by using white textcolour for "dark" backgrounds.

See https://en.wikipedia.org/w/index.php?title=Web_colors&oldid=651498112#X11_color_names (*) for a nice overview (when to use black, when to use white textcolour).

(*) newer versions of this page do unfortunately not visualize the contrast differences.

See here for something different: random generation of "nice" colours:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.