1
0

Add timetable to Wulkanowy (#38)

* Add timetable entities, synchronization and UI
* Add better code hub config
* Update SDK tools
* Change activity to ui

* [API] fix lesson room, when division into groups
* [API] Rewrite lesson parser
* [API] Add support for new lesson type
* [API] Fix for substitutions in the timetable
This commit is contained in:
Rafał Borcz
2017-12-11 19:45:28 +01:00
committed by Mikołaj Pich
parent 647ed08460
commit c111e43f18
77 changed files with 3125 additions and 471 deletions

View File

@ -0,0 +1,8 @@
<!-- drawable/exclamation.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M11,4.5H13V15.5H11V4.5M13,17.5V19.5H11V17.5H13Z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z"
android:fillColor="@color/colorPrimary"/>
</vector>

View File

@ -7,7 +7,7 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1"
tools:context="io.github.wulkanowy.activity.dashboard.DashboardActivity">
tools:context="io.github.wulkanowy.ui.main.DashboardActivity">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/fragment_container"

View File

@ -7,7 +7,7 @@
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/coordinatorLayout"
tools:context="io.github.wulkanowy.activity.login.LoginActivity"
tools:context="io.github.wulkanowy.ui.login.LoginActivity"
>
<!-- Login progress -->
@ -77,7 +77,6 @@
android:hint="@string/prompt_email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="noExcludeDescendants"
/>
</android.support.design.widget.TextInputLayout>
@ -98,7 +97,6 @@
android:imeActionLabel="@string/action_sign_in"
android:imeOptions="actionDone"
android:fontFamily="sans-serif"
android:importantForAutofill="noExcludeDescendants"
/>
</android.support.design.widget.TextInputLayout>

View File

@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="io.github.wulkanowy.activity.dashboard.attendance.AttendanceFragment">
tools:context="io.github.wulkanowy.ui.main.attendance.AttendanceFragment">
<RelativeLayout
android:layout_width="match_parent"
@ -25,9 +25,10 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="46dp"
android:layout_marginTop="47dp"
android:text="@string/activity_under_construction"
android:textSize="17sp"
android:gravity="center"
android:textAlignment="center"
android:id="@+id/textView3" />
</RelativeLayout>

View File

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="io.github.wulkanowy.activity.dashboard.board.BoardFragment">
tools:context="io.github.wulkanowy.ui.main.board.BoardFragment">
<RelativeLayout
android:layout_width="match_parent"
@ -25,9 +25,10 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="46dp"
android:layout_marginTop="47dp"
android:text="@string/activity_under_construction"
android:textSize="17sp"
android:gravity="center"
android:textAlignment="center"
android:id="@+id/textView3" />
</RelativeLayout>

View File

@ -4,7 +4,7 @@
android:id="@+id/coordinator_grade"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="io.github.wulkanowy.activity.dashboard.grades.GradesFragment">
tools:context="io.github.wulkanowy.ui.main.grades.GradesFragment">
<RelativeLayout
android:layout_width="match_parent"

View File

@ -1,35 +0,0 @@
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="io.github.wulkanowy.activity.dashboard.lessonplan.LessonPlanFragment">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/wrench_under_construction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView3"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"
android:contentDescription="@string/activity_dashboard_text"
android:minHeight="100dp"
android:minWidth="100dp"
app:srcCompat="@drawable/ic_wrench_construction" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="46dp"
android:text="@string/activity_under_construction"
android:textSize="17sp"
android:textAlignment="center"
android:id="@+id/textView3" />
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,36 @@
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true">
<RelativeLayout
android:id="@+id/timetable_tab_progress_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/timetable_fragment_tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMinWidth="125dp"
app:tabMode="scrollable"/>
<android.support.v4.view.ViewPager
android:id="@+id/timetable_fragment_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/timetable_fragment_tab" />
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,32 @@
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinator_grade"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="io.github.wulkanowy.ui.main.grades.GradesFragment">
<RelativeLayout
android:id="@+id/timetable_progress_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true" />
</RelativeLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/timetable_refresh_layout">
<android.support.v7.widget.RecyclerView
android:id="@+id/timetable_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout>

View File

@ -1,6 +1,7 @@
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
android:id="@+id/grade_cardview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -45,7 +46,8 @@
android:ellipsize="end"
android:maxLines="1"
android:text="@string/app_name"
android:textSize="15sp" />
android:textSize="15sp"
tool:ignore="all"/>
<TextView
android:id="@+id/grade_date_text"
@ -64,7 +66,8 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/subject_alert_circle" />
app:srcCompat="@drawable/subject_alert_circle"
tool:ignore="contentDescription"/>
</RelativeLayout>
</android.support.v7.widget.CardView>

View File

@ -8,7 +8,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="450dp"
android:minWidth="325dp"
android:minWidth="300dp"
android:orientation="vertical">
@ -176,7 +176,7 @@
android:layout_alignParentRight="true"
android:background="?attr/selectableItemBackground"
android:focusable="true"
android:text="@string/dialog_close"
android:text="@string/generic_dialog_close"
android:textAllCaps="true"
android:textSize="15sp"
/>

View File

@ -2,6 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tool="http://schemas.android.com/tools"
android:background="@drawable/subject_border_1px"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:padding="15dp">
@ -48,5 +49,6 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/subject_alert_circle" />
app:srcCompat="@drawable/subject_alert_circle"
tool:ignore="contentDescription"/>
</RelativeLayout>

View File

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minWidth="300dp"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/timetable_dialog_relative_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingEnd="20dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingStart="20dp"
android:paddingTop="10dp"
tools:ignore="UselessParent">
<TextView
android:id="@+id/timetable_dialog_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_gravity="start"
android:gravity="center_vertical"
android:maxLines="5"
android:minHeight="60dp"
android:minLines="2"
android:paddingTop="10dp"
android:text="@string/generic_dialog_details"
android:textIsSelectable="true"
android:textSize="20sp" />
<TextView
android:id="@+id/timetable_dialog_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_details"
android:layout_marginTop="10dp"
android:text="@string/timetable_dialog_description"
android:textColor="@color/colorPrimaryDark"
android:textSize="17sp" />
<TextView
android:id="@+id/timetable_dialog_description_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_description"
android:layout_marginTop="3dp"
android:text="@string/generic_app_no_data"
android:textColor="@color/colorPrimaryDark"
android:textIsSelectable="true"
android:textSize="12sp" />
<TextView
android:id="@+id/timetable_dialog_lesson"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_description_value"
android:layout_marginTop="10dp"
android:text="@string/timetable_dialog_lesson"
android:textIsSelectable="true"
android:textSize="17sp" />
<TextView
android:id="@+id/timetable_dialog_lesson_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_lesson"
android:layout_marginTop="3dp"
android:text="@string/generic_app_no_data"
android:textIsSelectable="true"
android:textSize="12sp" />
<TextView
android:id="@+id/timetable_dialog_teacher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_lesson_value"
android:layout_marginTop="10dp"
android:text="@string/generic_dialog_teacher"
android:textSize="17sp" />
<TextView
android:id="@+id/timetable_dialog_teacher_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_teacher"
android:layout_marginTop="3dp"
android:text="@string/generic_app_no_data"
android:textIsSelectable="true"
android:textSize="12sp" />
<TextView
android:id="@+id/timetable_dialog_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_teacher_value"
android:layout_marginTop="10dp"
android:text="@string/timetable_dialog_group"
android:textSize="17sp" />
<TextView
android:id="@+id/timetable_dialog_group_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_group"
android:layout_marginTop="3dp"
android:text="@string/generic_app_no_data"
android:textIsSelectable="true"
android:textSize="12sp" />
<TextView
android:id="@+id/timetable_dialog_room"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_group_value"
android:layout_marginTop="10dp"
android:text="@string/timetable_dialog_room"
android:textSize="17sp" />
<TextView
android:id="@+id/timetable_dialog_room_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@id/timetable_dialog_room"
android:layout_marginTop="3dp"
android:text="@string/generic_app_no_data"
android:textIsSelectable="true"
android:textSize="12sp" />
<TextView
android:id="@+id/timetable_dialog_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_room_value"
android:layout_marginTop="10dp"
android:text="@string/timetable_dialog_time"
android:textSize="17sp" />
<TextView
android:id="@+id/timetable_dialog_time_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_dialog_time"
android:layout_marginTop="3dp"
android:text="@string/generic_app_no_data"
android:textIsSelectable="true"
android:textSize="12sp" />
<Button
android:id="@+id/timetable_dialog_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/timetable_dialog_time_value"
android:layout_marginTop="25dp"
android:background="?attr/selectableItemBackground"
android:focusable="true"
android:text="@string/generic_dialog_close"
android:textAllCaps="true"
android:textSize="15sp" />
</RelativeLayout>
</LinearLayout>
</ScrollView>

View File

@ -0,0 +1,48 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/subject_border_1px"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:padding="15dp">
<TextView
android:id="@+id/timetable_header_dayName_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginEnd="15dp"
android:layout_marginRight="15dp"
android:layout_toLeftOf="@id/timetable_header_alert_image"
android:layout_toStartOf="@+id/timetable_header_alert_image"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/app_name"
android:textSize="19sp" />
<TextView
android:id="@+id/timetable_header_date_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/timetable_header_dayName_text"
android:layout_marginTop="5dp"
android:maxLines="1"
android:text="@string/app_name"
android:textColor="#4C4C4C"
android:textSize="14sp" />
<ImageView
android:id="@+id/timetable_header_alert_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/ic_generic_exclamation"
tools:ignore="contentDescription" />
</RelativeLayout>

View File

@ -0,0 +1,95 @@
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
android:id="@+id/timetable_subItem_cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="7dp"
android:layout_marginEnd="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginStart="5dp"
android:foreground="?attr/selectableItemBackgroundBorderless"
card_view:cardElevation="0dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="7dp"
android:layout_marginEnd="7dp"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:layout_marginStart="7dp"
android:layout_marginTop="7dp">
<TextView
android:id="@+id/timetable_subItem_number_of_lesson"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:gravity="center"
android:maxLength="1"
android:text="0"
android:textSize="32sp"
tool:ignore="all"/>
<TextView
android:id="@+id/timetable_subItem_lesson_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginEnd="40dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="40dp"
android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/timetable_subItem_number_of_lesson"
android:layout_toRightOf="@+id/timetable_subItem_number_of_lesson"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/app_name"
android:textSize="17sp"
tool:ignore="all"/>
<TextView
android:id="@+id/timetable_subItem_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/timetable_subItem_number_of_lesson"
android:layout_alignLeft="@id/timetable_subItem_lesson_text"
android:layout_alignStart="@id/timetable_subItem_lesson_text"
android:maxLines="1"
android:text="@string/grades_text"
android:textColor="#4C4C4C"
android:textSize="12sp" />
<TextView
android:id="@+id/timetable_subItem_room"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/timetable_subItem_number_of_lesson"
android:layout_marginEnd="40dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="40dp"
android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/timetable_subItem_time"
android:layout_toRightOf="@+id/timetable_subItem_time"
android:maxLines="1"
android:text="@string/grades_text"
android:textColor="#4C4C4C"
android:textSize="12sp"
tool:ignore="all"/>
<ImageView
android:id="@+id/timetable_subItem_change_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/ic_timetable_swap"
tool:ignore="contentDescription"/>
</RelativeLayout>
</android.support.v7.widget.CardView>

View File

@ -51,13 +51,28 @@
<string name="dialog_teacher_text">Nauczyciel</string>
<string name="dialog_date_text">Data</string>
<string name="dialog_color_text">Kolor</string>
<string name="dialog_close">Zamknij</string>
<string name="timetable_dialog_lesson">Lekcja</string>
<string name="timetable_dialog_room">Sala</string>
<string name="timetable_dialog_group">Grupa</string>
<string name="timetable_dialog_time">Godziny</string>
<string name="timetable_dialog_description">Zmiany</string>
<string name="timetable_refresh_success">Poprawnie zsynchronizowano</string>
<string name="generic_dialog_details">Szczegóły</string>
<string name="generic_dialog_close">Zamknij</string>
<string name="generic_dialog_teacher">Nauczyciel</string>
<string name="generic_app_no_data">Brak danych</string>
<string name="generic_timeout_error">Zbyt długie oczekiwanie na połączenie</string>
<string name="snackbar_no_grades">Brak nowych ocen</string>
<string name="snackbar_new_grade">Ilość nowych ocen: %1$d</string>
<string name="info_average_grades">Średnia: %1$.2f</string>
<string name="info_no_average">Brak średniej</string>
<string name="timetable_subitem_room">Sala %s</string>
<plurals name="numberOfGradesPlurals">
<item quantity="one">%d ocena</item>

View File

@ -51,7 +51,21 @@
<string name="dialog_teacher_text">Teacher</string>
<string name="dialog_date_text">Date</string>
<string name="dialog_color_text">Color</string>
<string name="dialog_close">Close</string>
<string name="timetable_dialog_lesson">Lesson</string>
<string name="timetable_dialog_room">Room</string>
<string name="timetable_dialog_group">Group</string>
<string name="timetable_dialog_time">Times</string>
<string name="timetable_dialog_description">Changes</string>
<string name="timetable_refresh_success">Successful synchronisation</string>
<string name="generic_dialog_details">Details</string>
<string name="generic_dialog_close">Close</string>
<string name="generic_dialog_teacher">Teacher</string>
<string name="generic_app_no_data">No data</string>
<string name="generic_timeout_error">Too long wait for connection</string>
<string name="snackbar_no_grades">No new grades</string>
<string name="snackbar_new_grade">Number of new grades: %1$d</string>
@ -59,6 +73,8 @@
<string name="info_average_grades">Average: %1$.2f</string>
<string name="info_no_average">No average</string>
<string name="timetable_subitem_room">Room %s</string>
<plurals name="numberOfGradesPlurals">
<item quantity="one">%d grade</item>
<item quantity="other">%d grades</item>