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"
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="visible"
31 <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
32 android:layout_width="match_parent"
33 android:layout_height="wrap_content"
37 android:id="@+id/welcome_header"
38 android:layout_width="match_parent"
39 android:layout_height="wrap_content"
40 app:layout_constraintEnd_toEndOf="parent"
41 app:layout_constraintStart_toStartOf="parent"
42 app:layout_constraintTop_toTopOf="parent"
45 <include layout="@layout/nav_header_layout" />
48 <androidx.constraintlayout.widget.ConstraintLayout
49 android:layout_width="0dp"
50 android:layout_height="wrap_content"
51 android:padding="@dimen/activity_horizontal_margin"
52 app:layout_constraintBottom_toBottomOf="parent"
53 app:layout_constraintEnd_toEndOf="parent"
54 app:layout_constraintStart_toStartOf="parent"
55 app:layout_constraintTop_toBottomOf="@id/welcome_header"
59 android:id="@+id/textView"
60 android:layout_width="wrap_content"
61 android:layout_height="wrap_content"
62 android:layout_marginVertical="48dp"
63 android:text="@string/text_welcome"
64 android:textColor="?textColor"
65 android:textSize="48sp"
66 app:layout_constraintBottom_toTopOf="@id/textView3"
67 app:layout_constraintEnd_toEndOf="parent"
68 app:layout_constraintStart_toStartOf="parent"
69 app:layout_constraintTop_toTopOf="parent"
73 android:id="@+id/textView3"
74 android:layout_width="wrap_content"
75 android:layout_height="wrap_content"
76 android:layout_marginVertical="24dp"
77 android:layout_marginStart="8dp"
78 android:layout_marginEnd="8dp"
79 android:text="@string/text_welcome_profile_needed"
80 android:textColor="?textColor"
81 android:textSize="20sp"
82 app:layout_constraintBottom_toTopOf="@id/btn_no_profiles_add"
83 app:layout_constraintEnd_toEndOf="parent"
84 app:layout_constraintStart_toStartOf="parent"
85 app:layout_constraintTop_toBottomOf="@+id/textView"
89 android:id="@+id/btn_no_profiles_add"
90 android:layout_width="wrap_content"
91 android:layout_height="wrap_content"
92 android:layout_marginVertical="24dp"
93 android:layout_marginStart="8dp"
94 android:layout_marginEnd="8dp"
95 android:backgroundTint="?colorSecondary"
96 android:drawablePadding="16dp"
97 android:text="@string/create_profile_label"
98 android:textColor="@color/design_default_color_on_primary"
99 app:layout_constraintBottom_toTopOf="@id/restore_hint"
100 app:layout_constraintEnd_toEndOf="parent"
101 app:layout_constraintStart_toStartOf="parent"
102 app:layout_constraintTop_toBottomOf="@+id/textView3"
105 android:id="@+id/restore_hint"
106 android:layout_width="wrap_content"
107 android:layout_height="wrap_content"
108 android:layout_marginHorizontal="8dp"
109 android:layout_marginVertical="24dp"
110 android:text="@string/no_profile_restore_hint"
111 android:textColor="?textColor"
112 android:textSize="20sp"
113 app:layout_constraintBottom_toTopOf="@id/btn_restore"
114 app:layout_constraintEnd_toEndOf="parent"
115 app:layout_constraintStart_toStartOf="parent"
116 app:layout_constraintTop_toBottomOf="@id/btn_no_profiles_add"
120 android:id="@+id/btn_restore"
121 android:layout_width="wrap_content"
122 android:layout_height="wrap_content"
123 android:layout_marginHorizontal="8dp"
124 android:layout_marginVertical="24dp"
125 android:drawableStart="@drawable/ic_baseline_restore_24"
126 android:drawablePadding="@dimen/text_margin"
127 android:text="@string/restore_button_label"
128 app:layout_constraintBottom_toBottomOf="parent"
129 app:layout_constraintEnd_toEndOf="parent"
130 app:layout_constraintStart_toStartOf="parent"
131 app:layout_constraintTop_toBottomOf="@id/restore_hint"
133 </androidx.constraintlayout.widget.ConstraintLayout>
134 </androidx.constraintlayout.widget.ConstraintLayout>
136 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto"
137 android:id="@+id/main_app_layout"
138 android:layout_width="match_parent"
139 android:layout_height="match_parent"
140 android:background="?android:attr/colorBackground"
141 android:orientation="vertical"
142 android:visibility="gone"
145 <com.google.android.material.floatingactionbutton.FloatingActionButton
146 android:id="@+id/btn_add_transaction"
147 android:layout_width="wrap_content"
148 android:layout_height="wrap_content"
149 android:layout_gravity="bottom|end"
150 android:layout_margin="@dimen/fab_margin"
151 android:contentDescription="@string/new_transaction_fab_description"
152 app:backgroundTint="?colorSecondary"
153 app:layout_constraintBottom_toBottomOf="parent"
154 app:layout_constraintEnd_toEndOf="parent"
155 app:maxImageSize="36dp"
156 app:srcCompat="@drawable/ic_add_white_24dp"
159 <androidx.drawerlayout.widget.DrawerLayout
160 android:id="@+id/drawer_layout"
161 android:layout_width="match_parent"
162 android:layout_height="match_parent"
163 tools:openDrawer="start"
166 <androidx.constraintlayout.widget.ConstraintLayout
167 android:id="@+id/pager_layout"
168 android:layout_width="match_parent"
169 android:layout_height="match_parent"
172 <androidx.appcompat.widget.Toolbar
173 android:id="@+id/toolbar"
174 android:layout_width="match_parent"
175 android:layout_height="wrap_content"
176 android:background="?colorPrimary"
177 android:theme="@style/AppTheme.AppBarOverlay"
178 app:layout_constraintEnd_toEndOf="parent"
179 app:layout_constraintStart_toStartOf="parent"
180 app:layout_constraintTop_toTopOf="parent"
181 app:popupTheme="@style/AppTheme.PopupOverlay"
182 app:subtitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"
183 app:titleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
188 android:id="@+id/transaction_progress_layout"
189 android:layout_width="match_parent"
190 android:layout_height="wrap_content"
191 android:gravity="center_vertical"
192 android:orientation="horizontal"
193 android:visibility="gone"
194 app:layout_constraintEnd_toEndOf="parent"
195 app:layout_constraintStart_toStartOf="parent"
196 app:layout_constraintTop_toBottomOf="@id/toolbar"
200 android:id="@+id/transaction_list_progress_bar"
201 style="?android:attr/progressBarStyleHorizontal"
202 android:layout_width="0dp"
203 android:layout_height="wrap_content"
204 android:layout_marginTop="-8dp"
205 android:layout_marginBottom="-7dp"
206 android:layout_weight="1"
207 android:indeterminate="true"
209 android:padding="0dp"
210 android:progressTint="?colorPrimary"
211 app:layout_constraintEnd_toEndOf="parent"
212 app:layout_constraintStart_toStartOf="parent"
216 android:id="@+id/transaction_list_cancel_download"
217 android:layout_width="wrap_content"
218 android:layout_height="wrap_content"
219 android:background="@drawable/ic_clear_accent_24dp"
220 android:clickable="true"
221 android:focusable="true"
225 <androidx.viewpager2.widget.ViewPager2
226 android:id="@+id/main_pager"
227 android:layout_width="match_parent"
228 android:layout_height="0dp"
229 app:layout_constraintBottom_toBottomOf="parent"
230 app:layout_constraintEnd_toEndOf="parent"
231 app:layout_constraintStart_toStartOf="parent"
232 app:layout_constraintTop_toBottomOf="@id/transaction_progress_layout"
235 </androidx.viewpager2.widget.ViewPager2>
238 android:layout_width="0dp"
239 android:layout_height="?attr/main_header_shadow_height"
240 android:background="@drawable/drop_shadow"
241 app:layout_constraintEnd_toEndOf="parent"
242 app:layout_constraintStart_toStartOf="parent"
243 app:layout_constraintTop_toBottomOf="@id/transaction_progress_layout"
247 </androidx.constraintlayout.widget.ConstraintLayout>
249 <com.google.android.material.navigation.NavigationView xmlns:app="http://schemas.android.com/apk/res-auto"
250 android:id="@+id/nav_view"
251 android:layout_width="wrap_content"
252 android:layout_height="match_parent"
253 android:layout_gravity="start"
254 android:fitsSystemWindows="true"
258 <androidx.constraintlayout.widget.ConstraintLayout
259 android:layout_width="match_parent"
260 android:layout_height="match_parent"
261 android:layout_marginBottom="0dp"
262 android:animateLayoutChanges="true"
263 android:orientation="vertical"
267 android:id="@+id/nav_fixed_items"
268 android:layout_width="match_parent"
269 android:layout_height="wrap_content"
270 android:divider="@drawable/list_divider"
271 android:elevation="2dp"
272 android:orientation="vertical"
273 android:showDividers="beginning"
274 android:visibility="visible"
275 app:layout_constraintBottom_toBottomOf="parent"
279 android:id="@+id/textView2"
280 style="@style/nav_button"
281 android:layout_weight="1"
282 android:text="@string/action_settings"
283 android:visibility="gone"
284 app:drawableStartCompat="@drawable/ic_settings_black_24dp"
287 android:id="@+id/nav_backup_restore"
288 style="@style/nav_button"
289 android:layout_weight="1"
290 android:text="@string/action_import_export"
291 app:drawableStartCompat="@drawable/ic_baseline_backup_24"
297 android:layout_width="0dp"
298 android:layout_height="0dp"
299 app:layout_constraintBottom_toTopOf="@+id/nav_fixed_items"
300 app:layout_constraintEnd_toEndOf="parent"
301 app:layout_constraintLeft_toLeftOf="parent"
302 app:layout_constraintStart_toStartOf="parent"
303 app:layout_constraintTop_toTopOf="parent"
307 android:id="@+id/nav_upper"
308 android:layout_width="match_parent"
309 android:layout_height="wrap_content"
310 android:animateLayoutChanges="true"
311 android:orientation="vertical"
312 android:showDividers="beginning"
313 app:layout_constraintBottom_toTopOf="@+id/nav_fixed_items"
314 app:layout_constraintTop_toBottomOf="@+id/nav_header"
317 <include layout="@layout/nav_header_layout" />
320 android:id="@+id/nav_actions"
321 android:layout_width="match_parent"
322 android:layout_height="match_parent"
323 android:orientation="vertical"
327 android:id="@+id/nav_account_summary"
328 style="@style/nav_button"
329 android:text="@string/account_summary_title"
330 app:drawableStartCompat="@drawable/ic_home_black_24dp"
334 android:id="@+id/nav_latest_transactions"
335 style="@style/nav_button"
336 android:text="@string/nav_transactions_title"
337 app:drawableStartCompat="@drawable/ic_event_note_black_24dp"
341 android:id="@+id/textView5"
342 style="@style/nav_button"
343 android:text="@string/nav_reports_title"
344 android:visibility="gone"
345 app:drawableStartCompat="@drawable/ic_assignment_black_24dp"
348 <androidx.constraintlayout.widget.ConstraintLayout
349 android:id="@+id/nav_profile_list_head_layout"
350 android:layout_width="match_parent"
351 android:layout_height="@dimen/thumb_row_height"
355 android:id="@+id/nav_new_profile_button"
356 android:layout_width="wrap_content"
357 android:layout_height="wrap_content"
358 android:layout_gravity="center"
359 android:contentDescription="@string/icon"
360 android:paddingStart="8dp"
361 android:paddingEnd="8dp"
362 android:visibility="gone"
363 app:layout_constraintBottom_toBottomOf="parent"
364 app:layout_constraintEnd_toStartOf="@id/nav_profile_list_head_buttons"
365 app:layout_constraintStart_toEndOf="@id/nav_profiles_label"
366 app:layout_constraintTop_toTopOf="parent"
367 app:srcCompat="@drawable/ic_add_circle_white_24dp"
371 android:id="@+id/nav_profile_list_head_buttons"
372 android:layout_width="wrap_content"
373 android:layout_height="0dp"
374 android:gravity="center_vertical"
375 android:orientation="horizontal"
376 android:paddingStart="16dp"
377 android:paddingEnd="16dp"
378 app:layout_constraintBottom_toBottomOf="parent"
379 app:layout_constraintEnd_toEndOf="parent"
380 app:layout_constraintTop_toTopOf="parent"
384 android:id="@+id/nav_profiles_cancel_edit"
385 android:layout_width="wrap_content"
386 android:layout_height="wrap_content"
387 android:background="@drawable/ic_clear_accent_24dp"
388 android:contentDescription="@string/icon"
389 android:gravity="end|center_vertical"
390 android:paddingStart="8dp"
391 android:paddingEnd="8dp"
392 android:visibility="gone"
393 app:layout_constraintBottom_toBottomOf="parent"
394 app:layout_constraintEnd_toEndOf="parent"
395 app:layout_constraintTop_toTopOf="parent"
399 android:id="@+id/nav_profiles_start_edit"
400 android:layout_width="wrap_content"
401 android:layout_height="wrap_content"
402 android:background="@drawable/ic_settings_black_24dp"
403 android:contentDescription="@string/icon"
404 android:gravity="end|center_vertical"
405 android:paddingStart="8dp"
406 android:paddingEnd="8dp"
407 app:layout_constraintBottom_toBottomOf="parent"
408 app:layout_constraintEnd_toEndOf="parent"
409 app:layout_constraintTop_toTopOf="parent"
415 android:id="@+id/nav_profiles_label"
416 style="@style/nav_button"
417 android:layout_width="wrap_content"
418 android:layout_height="0dp"
419 android:gravity="start|center_vertical"
420 android:text="@string/profiles"
421 app:layout_constraintBottom_toBottomOf="parent"
422 app:layout_constraintStart_toStartOf="parent"
423 app:layout_constraintTop_toTopOf="parent"
426 </androidx.constraintlayout.widget.ConstraintLayout>
428 android:id="@+id/nav_profile_list_container"
429 android:layout_width="match_parent"
430 android:layout_height="wrap_content"
431 android:animateLayoutChanges="true"
432 android:nestedScrollingEnabled="false"
433 android:orientation="vertical"
436 <androidx.recyclerview.widget.RecyclerView
437 android:id="@+id/nav_profile_list"
438 android:layout_width="match_parent"
439 android:layout_height="wrap_content"
440 android:isScrollContainer="false"
441 android:nestedScrollingEnabled="false"
442 android:orientation="vertical"
445 </androidx.recyclerview.widget.RecyclerView>
451 android:id="@+id/nav_patterns"
452 style="@style/nav_button"
453 android:text="@string/nav_templates"
454 app:drawableStartCompat="@drawable/ic_baseline_auto_graph_24"
460 </androidx.constraintlayout.widget.ConstraintLayout>
462 </com.google.android.material.navigation.NavigationView>
463 </androidx.drawerlayout.widget.DrawerLayout>
464 </androidx.coordinatorlayout.widget.CoordinatorLayout>