1 <?xml version="1.0" encoding="utf-8"?><!--
2 ~ Copyright © 2021 Damyan Ivanov.
3 ~ This file is part of MoLe.
4 ~ MoLe is free software: you can distribute it and/or modify it
5 ~ under the term of the GNU General Public License as published by
6 ~ the Free Software Foundation, either version 3 of the License, or
7 ~ (at your opinion), any later version.
9 ~ MoLe is distributed in the hope that it will be useful,
10 ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ~ GNU General Public License terms for details.
14 ~ You should have received a copy of the GNU General Public License
15 ~ along with MoLe. If not, see <https://www.gnu.org/licenses/>.
17 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
18 xmlns:tools="http://schemas.android.com/tools"
19 android:layout_width="match_parent"
20 android:layout_height="match_parent"
21 tools:context=".ui.activity.MainActivity"
24 <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
25 android:id="@+id/no_profiles_layout"
26 android:layout_width="match_parent"
27 android:layout_height="match_parent"
28 android:background="?table_row_dark_bg"
29 android:visibility="gone"
33 android:id="@+id/welcome_header"
34 android:layout_width="match_parent"
35 android:layout_height="wrap_content"
36 app:layout_constraintEnd_toEndOf="parent"
37 app:layout_constraintStart_toStartOf="parent"
38 app:layout_constraintTop_toTopOf="parent"
41 <include layout="@layout/nav_header_layout" />
44 <androidx.constraintlayout.widget.ConstraintLayout
45 android:layout_width="0dp"
46 android:layout_height="0dp"
47 android:padding="@dimen/activity_horizontal_margin"
48 app:layout_constraintBottom_toBottomOf="parent"
49 app:layout_constraintEnd_toEndOf="parent"
50 app:layout_constraintStart_toStartOf="parent"
51 app:layout_constraintTop_toBottomOf="@id/welcome_header"
55 android:id="@+id/textView"
56 android:layout_width="wrap_content"
57 android:layout_height="wrap_content"
58 android:layout_marginTop="48dp"
59 android:text="@string/text_welcome"
60 android:textColor="?textColor"
61 android:textSize="48sp"
62 app:layout_constraintEnd_toEndOf="parent"
63 app:layout_constraintStart_toStartOf="parent"
64 app:layout_constraintTop_toTopOf="parent"
68 android:id="@+id/textView3"
69 android:layout_width="wrap_content"
70 android:layout_height="wrap_content"
71 android:layout_marginStart="8dp"
72 android:layout_marginTop="24dp"
73 android:layout_marginEnd="8dp"
74 android:text="@string/text_welcome_profile_needed"
75 android:textColor="?textColor"
76 android:textSize="20sp"
77 app:layout_constraintEnd_toEndOf="parent"
78 app:layout_constraintStart_toStartOf="parent"
79 app:layout_constraintTop_toBottomOf="@+id/textView"
83 android:id="@+id/btn_no_profiles_add"
84 android:layout_width="wrap_content"
85 android:layout_height="wrap_content"
86 android:layout_marginStart="8dp"
87 android:layout_marginTop="24dp"
88 android:layout_marginEnd="8dp"
89 android:layout_marginBottom="8dp"
90 android:backgroundTint="?colorSecondary"
91 android:drawablePadding="16dp"
92 android:text="@string/create_profile_label"
93 android:textColor="@color/design_default_color_on_primary"
94 app:layout_constraintBottom_toTopOf="@id/btn_restore"
95 app:layout_constraintEnd_toEndOf="parent"
96 app:layout_constraintStart_toStartOf="parent"
97 app:layout_constraintTop_toBottomOf="@+id/textView3"
100 android:id="@+id/btn_restore"
101 android:layout_width="wrap_content"
102 android:layout_height="wrap_content"
103 android:layout_marginHorizontal="8dp"
104 android:layout_marginVertical="24dp"
105 android:drawableStart="@drawable/ic_baseline_restore_24"
106 android:drawablePadding="@dimen/text_margin"
107 android:text="@string/restore_button_label"
108 app:layout_constraintBottom_toBottomOf="parent"
109 app:layout_constraintEnd_toEndOf="parent"
110 app:layout_constraintStart_toStartOf="parent"
111 app:layout_constraintTop_toBottomOf="@id/btn_no_profiles_add"
113 </androidx.constraintlayout.widget.ConstraintLayout>
114 </androidx.constraintlayout.widget.ConstraintLayout>
116 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto"
117 android:id="@+id/main_app_layout"
118 android:layout_width="match_parent"
119 android:layout_height="match_parent"
120 android:background="?android:attr/colorBackground"
121 android:orientation="vertical"
122 android:visibility="visible"
125 <com.google.android.material.floatingactionbutton.FloatingActionButton
126 android:id="@+id/btn_add_transaction"
127 android:layout_width="wrap_content"
128 android:layout_height="wrap_content"
129 android:layout_gravity="bottom|end"
130 android:layout_margin="@dimen/fab_margin"
131 android:contentDescription="@string/new_transaction_fab_description"
132 app:backgroundTint="?colorSecondary"
133 app:layout_constraintBottom_toBottomOf="parent"
134 app:layout_constraintEnd_toEndOf="parent"
135 app:maxImageSize="36dp"
136 app:srcCompat="@drawable/ic_add_white_24dp"
139 <androidx.drawerlayout.widget.DrawerLayout
140 android:id="@+id/drawer_layout"
141 android:layout_width="match_parent"
142 android:layout_height="match_parent"
143 tools:openDrawer="start"
146 <androidx.constraintlayout.widget.ConstraintLayout
147 android:id="@+id/pager_layout"
148 android:layout_width="match_parent"
149 android:layout_height="match_parent"
152 <androidx.appcompat.widget.Toolbar
153 android:id="@+id/toolbar"
154 android:layout_width="match_parent"
155 android:layout_height="wrap_content"
156 android:background="?colorPrimary"
157 android:theme="@style/AppTheme.AppBarOverlay"
158 app:layout_constraintEnd_toEndOf="parent"
159 app:layout_constraintStart_toStartOf="parent"
160 app:layout_constraintTop_toTopOf="parent"
161 app:popupTheme="@style/AppTheme.PopupOverlay"
162 app:subtitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"
163 app:titleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
168 android:id="@+id/transaction_progress_layout"
169 android:layout_width="match_parent"
170 android:layout_height="wrap_content"
171 android:gravity="center_vertical"
172 android:orientation="horizontal"
173 android:visibility="gone"
174 app:layout_constraintEnd_toEndOf="parent"
175 app:layout_constraintStart_toStartOf="parent"
176 app:layout_constraintTop_toBottomOf="@id/toolbar"
180 android:id="@+id/transaction_list_progress_bar"
181 style="?android:attr/progressBarStyleHorizontal"
182 android:layout_width="0dp"
183 android:layout_height="wrap_content"
184 android:layout_marginTop="-8dp"
185 android:layout_marginBottom="-7dp"
186 android:layout_weight="1"
187 android:indeterminate="true"
189 android:padding="0dp"
190 android:progressTint="?colorPrimary"
191 app:layout_constraintEnd_toEndOf="parent"
192 app:layout_constraintStart_toStartOf="parent"
196 android:id="@+id/transaction_list_cancel_download"
197 android:layout_width="wrap_content"
198 android:layout_height="wrap_content"
199 android:background="@drawable/ic_clear_accent_24dp"
200 android:clickable="true"
201 android:focusable="true"
205 <androidx.viewpager2.widget.ViewPager2
206 android:id="@+id/main_pager"
207 android:layout_width="match_parent"
208 android:layout_height="0dp"
209 app:layout_constraintBottom_toBottomOf="parent"
210 app:layout_constraintEnd_toEndOf="parent"
211 app:layout_constraintStart_toStartOf="parent"
212 app:layout_constraintTop_toBottomOf="@id/transaction_progress_layout"
215 </androidx.viewpager2.widget.ViewPager2>
218 android:layout_width="0dp"
219 android:layout_height="?attr/main_header_shadow_height"
220 android:background="@drawable/drop_shadow"
221 app:layout_constraintEnd_toEndOf="parent"
222 app:layout_constraintStart_toStartOf="parent"
223 app:layout_constraintTop_toBottomOf="@id/transaction_progress_layout"
227 </androidx.constraintlayout.widget.ConstraintLayout>
229 <com.google.android.material.navigation.NavigationView xmlns:app="http://schemas.android.com/apk/res-auto"
230 android:id="@+id/nav_view"
231 android:layout_width="wrap_content"
232 android:layout_height="match_parent"
233 android:layout_gravity="start"
234 android:fitsSystemWindows="true"
238 <androidx.constraintlayout.widget.ConstraintLayout
239 android:layout_width="match_parent"
240 android:layout_height="match_parent"
241 android:layout_marginBottom="0dp"
242 android:animateLayoutChanges="true"
243 android:orientation="vertical"
247 android:id="@+id/nav_fixed_items"
248 android:layout_width="match_parent"
249 android:layout_height="wrap_content"
250 android:divider="@drawable/list_divider"
251 android:elevation="2dp"
252 android:orientation="vertical"
253 android:showDividers="beginning"
254 android:visibility="visible"
255 app:layout_constraintBottom_toBottomOf="parent"
259 android:id="@+id/textView2"
260 style="@style/nav_button"
261 android:layout_weight="1"
262 android:text="@string/action_settings"
263 android:visibility="gone"
264 app:drawableStartCompat="@drawable/ic_settings_black_24dp"
267 android:id="@+id/nav_backup_restore"
268 style="@style/nav_button"
269 android:layout_weight="1"
270 android:text="@string/action_import_export"
271 app:drawableStartCompat="@drawable/ic_baseline_backup_24"
277 android:layout_width="0dp"
278 android:layout_height="0dp"
279 app:layout_constraintBottom_toTopOf="@+id/nav_fixed_items"
280 app:layout_constraintEnd_toEndOf="parent"
281 app:layout_constraintLeft_toLeftOf="parent"
282 app:layout_constraintStart_toStartOf="parent"
283 app:layout_constraintTop_toTopOf="parent"
287 android:id="@+id/nav_upper"
288 android:layout_width="match_parent"
289 android:layout_height="wrap_content"
290 android:animateLayoutChanges="true"
291 android:orientation="vertical"
292 android:showDividers="beginning"
293 app:layout_constraintBottom_toTopOf="@+id/nav_fixed_items"
294 app:layout_constraintTop_toBottomOf="@+id/nav_header"
297 <include layout="@layout/nav_header_layout" />
300 android:id="@+id/nav_actions"
301 android:layout_width="match_parent"
302 android:layout_height="match_parent"
303 android:orientation="vertical"
307 android:id="@+id/nav_account_summary"
308 style="@style/nav_button"
309 android:text="@string/account_summary_title"
310 app:drawableStartCompat="@drawable/ic_home_black_24dp"
314 android:id="@+id/nav_latest_transactions"
315 style="@style/nav_button"
316 android:text="@string/nav_transactions_title"
317 app:drawableStartCompat="@drawable/ic_event_note_black_24dp"
321 android:id="@+id/textView5"
322 style="@style/nav_button"
323 android:text="@string/nav_reports_title"
324 android:visibility="gone"
325 app:drawableStartCompat="@drawable/ic_assignment_black_24dp"
328 <androidx.constraintlayout.widget.ConstraintLayout
329 android:id="@+id/nav_profile_list_head_layout"
330 android:layout_width="match_parent"
331 android:layout_height="@dimen/thumb_row_height"
335 android:id="@+id/nav_new_profile_button"
336 android:layout_width="wrap_content"
337 android:layout_height="wrap_content"
338 android:layout_gravity="center"
339 android:contentDescription="@string/icon"
340 android:paddingStart="8dp"
341 android:paddingEnd="8dp"
342 android:visibility="gone"
343 app:layout_constraintBottom_toBottomOf="parent"
344 app:layout_constraintEnd_toStartOf="@id/nav_profile_list_head_buttons"
345 app:layout_constraintStart_toEndOf="@id/nav_profiles_label"
346 app:layout_constraintTop_toTopOf="parent"
347 app:srcCompat="@drawable/ic_add_circle_white_24dp"
351 android:id="@+id/nav_profile_list_head_buttons"
352 android:layout_width="wrap_content"
353 android:layout_height="0dp"
354 android:gravity="center_vertical"
355 android:orientation="horizontal"
356 android:paddingStart="16dp"
357 android:paddingEnd="16dp"
358 app:layout_constraintBottom_toBottomOf="parent"
359 app:layout_constraintEnd_toEndOf="parent"
360 app:layout_constraintTop_toTopOf="parent"
364 android:id="@+id/nav_profiles_cancel_edit"
365 android:layout_width="wrap_content"
366 android:layout_height="wrap_content"
367 android:background="@drawable/ic_clear_accent_24dp"
368 android:contentDescription="@string/icon"
369 android:gravity="end|center_vertical"
370 android:paddingStart="8dp"
371 android:paddingEnd="8dp"
372 android:visibility="gone"
373 app:layout_constraintBottom_toBottomOf="parent"
374 app:layout_constraintEnd_toEndOf="parent"
375 app:layout_constraintTop_toTopOf="parent"
379 android:id="@+id/nav_profiles_start_edit"
380 android:layout_width="wrap_content"
381 android:layout_height="wrap_content"
382 android:background="@drawable/ic_settings_black_24dp"
383 android:contentDescription="@string/icon"
384 android:gravity="end|center_vertical"
385 android:paddingStart="8dp"
386 android:paddingEnd="8dp"
387 app:layout_constraintBottom_toBottomOf="parent"
388 app:layout_constraintEnd_toEndOf="parent"
389 app:layout_constraintTop_toTopOf="parent"
395 android:id="@+id/nav_profiles_label"
396 style="@style/nav_button"
397 android:layout_width="wrap_content"
398 android:layout_height="0dp"
399 android:gravity="start|center_vertical"
400 android:text="@string/profiles"
401 app:layout_constraintBottom_toBottomOf="parent"
402 app:layout_constraintStart_toStartOf="parent"
403 app:layout_constraintTop_toTopOf="parent"
406 </androidx.constraintlayout.widget.ConstraintLayout>
408 android:id="@+id/nav_profile_list_container"
409 android:layout_width="match_parent"
410 android:layout_height="wrap_content"
411 android:animateLayoutChanges="true"
412 android:nestedScrollingEnabled="false"
413 android:orientation="vertical"
416 <androidx.recyclerview.widget.RecyclerView
417 android:id="@+id/nav_profile_list"
418 android:layout_width="match_parent"
419 android:layout_height="wrap_content"
420 android:isScrollContainer="false"
421 android:nestedScrollingEnabled="false"
422 android:orientation="vertical"
425 </androidx.recyclerview.widget.RecyclerView>
431 android:id="@+id/nav_patterns"
432 style="@style/nav_button"
433 android:text="@string/nav_templates"
434 app:drawableStartCompat="@drawable/ic_baseline_auto_graph_24"
440 </androidx.constraintlayout.widget.ConstraintLayout>
442 </com.google.android.material.navigation.NavigationView>
443 </androidx.drawerlayout.widget.DrawerLayout>
444 </androidx.coordinatorlayout.widget.CoordinatorLayout>