diff options
Diffstat (limited to 'src/android/app/src/main/res')
17 files changed, 772 insertions, 36 deletions
diff --git a/src/android/app/src/main/res/drawable/ic_save.xml b/src/android/app/src/main/res/drawable/ic_save.xml index a9af3d9cf..5acc2bbab 100644 --- a/src/android/app/src/main/res/drawable/ic_save.xml +++ b/src/android/app/src/main/res/drawable/ic_save.xml @@ -1,10 +1,9 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" - android:viewportWidth="960" - android:viewportHeight="960" - android:tint="?attr/colorControlNormal"> + android:viewportWidth="24" + android:viewportHeight="24"> <path - android:fillColor="@android:color/white" - android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L647,120Q663,120 677.5,126Q692,132 703,143L817,257Q828,268 834,282.5Q840,297 840,313L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM760,314L646,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,314ZM480,720Q530,720 565,685Q600,650 600,600Q600,550 565,515Q530,480 480,480Q430,480 395,515Q360,550 360,600Q360,650 395,685Q430,720 480,720ZM280,400L560,400Q577,400 588.5,388.5Q600,377 600,360L600,280Q600,263 588.5,251.5Q577,240 560,240L280,240Q263,240 251.5,251.5Q240,263 240,280L240,360Q240,377 251.5,388.5Q263,400 280,400ZM200,314L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200L200,200L200,314Z"/> + android:fillColor="?attr/colorControlNormal" + android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z" /> </vector> diff --git a/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml b/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml new file mode 100644 index 000000000..59ee1aad3 --- /dev/null +++ b/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8"?> +<com.google.android.material.card.MaterialCardView 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" + style="?attr/materialCardViewOutlinedStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="16dp" + android:layout_marginVertical="12dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingHorizontal="24dp" + android:paddingVertical="16dp"> + + <ImageView + android:id="@+id/icon" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginEnd="20dp" + android:layout_gravity="center_vertical" + app:tint="?attr/colorOnSurface" + tools:src="@drawable/ic_settings" /> + + <LinearLayout + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:layout_weight="1" + android:orientation="vertical"> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/title" + style="@style/TextAppearance.Material3.TitleMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/user_data" + android:textAlignment="viewStart" /> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/description" + style="@style/TextAppearance.Material3.BodyMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:text="@string/user_data_description" + android:textAlignment="viewStart" /> + + </LinearLayout> + + <Button + android:id="@+id/button_export" + style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:contentDescription="@string/export" + android:tooltipText="@string/export" + android:visibility="gone" + app:icon="@drawable/ic_export" + tools:visibility="visible" /> + + <Button + android:id="@+id/button_install" + style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginStart="12dp" + android:contentDescription="@string/string_import" + android:tooltipText="@string/string_import" + android:visibility="gone" + app:icon="@drawable/ic_import" + tools:visibility="visible" /> + + </LinearLayout> + +</com.google.android.material.card.MaterialCardView> diff --git a/src/android/app/src/main/res/layout-w600dp/fragment_game_properties.xml b/src/android/app/src/main/res/layout-w600dp/fragment_game_properties.xml new file mode 100644 index 000000000..0b9633855 --- /dev/null +++ b/src/android/app/src/main/res/layout-w600dp/fragment_game_properties.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout + 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="match_parent" + android:background="?attr/colorSurface"> + + <androidx.core.widget.NestedScrollView + android:id="@+id/list_all" + android:layout_width="0dp" + android:layout_height="match_parent" + android:clipToPadding="false" + android:fadeScrollbars="false" + android:scrollbars="vertical" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/icon_layout" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:id="@+id/layout_all" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:orientation="horizontal"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/list_properties" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:listitem="@layout/card_simple_outlined" /> + + </LinearLayout> + + </androidx.core.widget.NestedScrollView> + + <LinearLayout + android:id="@+id/icon_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <Button + android:id="@+id/button_back" + style="?attr/materialIconButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="start" + android:layout_margin="8dp" + app:icon="@drawable/ic_back" + app:iconSize="24dp" + app:iconTint="?attr/colorOnSurface" /> + + <com.google.android.material.card.MaterialCardView + style="?attr/materialCardViewElevatedStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginHorizontal="16dp" + android:layout_marginTop="8dp" + app:cardCornerRadius="4dp" + app:cardElevation="4dp"> + + <ImageView + android:id="@+id/image_game_screen" + android:layout_width="175dp" + android:layout_height="175dp" + tools:src="@drawable/default_icon" /> + + </com.google.android.material.card.MaterialCardView> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/title" + style="@style/TextAppearance.Material3.TitleMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="16dp" + android:layout_marginTop="12dp" + android:ellipsize="none" + android:marqueeRepeatLimit="marquee_forever" + android:requiresFadingEdge="horizontal" + android:singleLine="true" + android:textAlignment="center" + tools:text="deko_basic" /> + + </LinearLayout> + + <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton + android:id="@+id/button_start" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/start" + app:icon="@drawable/ic_play" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/src/android/app/src/main/res/layout/card_installable.xml b/src/android/app/src/main/res/layout/card_installable.xml index f5b0e3741..ce2402d7a 100644 --- a/src/android/app/src/main/res/layout/card_installable.xml +++ b/src/android/app/src/main/res/layout/card_installable.xml @@ -11,7 +11,8 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="16dp" + android:paddingVertical="16dp" + android:paddingHorizontal="24dp" android:orientation="horizontal" android:layout_gravity="center"> diff --git a/src/android/app/src/main/res/layout/card_installable_icon.xml b/src/android/app/src/main/res/layout/card_installable_icon.xml new file mode 100644 index 000000000..4ae5423b1 --- /dev/null +++ b/src/android/app/src/main/res/layout/card_installable_icon.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="utf-8"?> +<com.google.android.material.card.MaterialCardView 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" + style="?attr/materialCardViewOutlinedStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="16dp" + android:layout_marginVertical="12dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingHorizontal="24dp" + android:paddingVertical="16dp"> + + <ImageView + android:id="@+id/icon" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginEnd="20dp" + android:layout_gravity="center_vertical" + app:tint="?attr/colorOnSurface" + tools:src="@drawable/ic_settings" /> + + <LinearLayout + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:layout_weight="1" + android:orientation="vertical"> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/title" + style="@style/TextAppearance.Material3.TitleMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/user_data" + android:textAlignment="viewStart" /> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/description" + style="@style/TextAppearance.Material3.BodyMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="6dp" + android:text="@string/user_data_description" + android:textAlignment="viewStart" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <Button + android:id="@+id/button_install" + style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:contentDescription="@string/string_import" + android:tooltipText="@string/string_import" + android:visibility="gone" + app:icon="@drawable/ic_import" + tools:visibility="visible" /> + + <Button + android:id="@+id/button_export" + style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginTop="8dp" + android:contentDescription="@string/export" + android:tooltipText="@string/export" + android:visibility="gone" + app:icon="@drawable/ic_export" + tools:visibility="visible" /> + + </LinearLayout> + + </LinearLayout> + +</com.google.android.material.card.MaterialCardView> diff --git a/src/android/app/src/main/res/layout/card_applet_option.xml b/src/android/app/src/main/res/layout/card_simple_outlined.xml index 19fbec9f1..b73930e7e 100644 --- a/src/android/app/src/main/res/layout/card_applet_option.xml +++ b/src/android/app/src/main/res/layout/card_simple_outlined.xml @@ -16,7 +16,8 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center" - android:padding="24dp"> + android:paddingVertical="16dp" + android:paddingHorizontal="24dp"> <ImageView android:id="@+id/icon" @@ -50,6 +51,23 @@ android:textAlignment="viewStart" tools:text="@string/applets_description" /> + <com.google.android.material.textview.MaterialTextView + style="@style/TextAppearance.Material3.LabelMedium" + android:id="@+id/details" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAlignment="viewStart" + android:textSize="14sp" + android:textStyle="bold" + android:singleLine="true" + android:marqueeRepeatLimit="marquee_forever" + android:ellipsize="none" + android:requiresFadingEdge="horizontal" + android:layout_marginTop="6dp" + android:visibility="gone" + tools:visibility="visible" + tools:text="/tree/primary:Games" /> + </LinearLayout> </LinearLayout> diff --git a/src/android/app/src/main/res/layout/fragment_addons.xml b/src/android/app/src/main/res/layout/fragment_addons.xml new file mode 100644 index 000000000..a25e82766 --- /dev/null +++ b/src/android/app/src/main/res/layout/fragment_addons.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/coordinator_about" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="?attr/colorSurface"> + + <com.google.android.material.appbar.AppBarLayout + android:id="@+id/appbar_addons" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fitsSystemWindows="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <com.google.android.material.appbar.MaterialToolbar + android:id="@+id/toolbar_addons" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:navigationIcon="@drawable/ic_back" /> + + </com.google.android.material.appbar.AppBarLayout> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/list_addons" + android:layout_width="match_parent" + android:layout_height="0dp" + android:clipToPadding="false" + app:layout_behavior="@string/appbar_scrolling_view_behavior" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/appbar_addons" /> + + <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton + android:id="@+id/button_install" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom|end" + android:text="@string/install" + app:icon="@drawable/ic_add" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/src/android/app/src/main/res/layout/fragment_game_info.xml b/src/android/app/src/main/res/layout/fragment_game_info.xml new file mode 100644 index 000000000..80ede8a8c --- /dev/null +++ b/src/android/app/src/main/res/layout/fragment_game_info.xml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.coordinatorlayout.widget.CoordinatorLayout 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:id="@+id/coordinator_about" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="?attr/colorSurface"> + + <com.google.android.material.appbar.AppBarLayout + android:id="@+id/appbar_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fitsSystemWindows="true"> + + <com.google.android.material.appbar.MaterialToolbar + android:id="@+id/toolbar_info" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:navigationIcon="@drawable/ic_back" /> + + </com.google.android.material.appbar.AppBarLayout> + + <androidx.core.widget.NestedScrollView + android:id="@+id/scroll_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + <LinearLayout + android:id="@+id/content_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingHorizontal="16dp"> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/path" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/path_field" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:editable="false" + android:importantForAutofill="no" + android:inputType="none" + android:minHeight="48dp" + android:textAlignment="viewStart" + tools:text="1.0.0" /> + + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/program_id" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/program_id_field" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:editable="false" + android:importantForAutofill="no" + android:inputType="none" + android:minHeight="48dp" + android:textAlignment="viewStart" + tools:text="1.0.0" /> + + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/developer" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/developer_field" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:editable="false" + android:importantForAutofill="no" + android:inputType="none" + android:minHeight="48dp" + android:textAlignment="viewStart" + tools:text="1.0.0" /> + + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/version" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dp"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/version_field" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:editable="false" + android:importantForAutofill="no" + android:inputType="none" + android:minHeight="48dp" + android:textAlignment="viewStart" + tools:text="1.0.0" /> + + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.button.MaterialButton + android:id="@+id/button_copy" + style="@style/Widget.Material3.Button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="@string/copy_details" /> + + </LinearLayout> + + </androidx.core.widget.NestedScrollView> + +</androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/src/android/app/src/main/res/layout/fragment_game_properties.xml b/src/android/app/src/main/res/layout/fragment_game_properties.xml new file mode 100644 index 000000000..72ecbde30 --- /dev/null +++ b/src/android/app/src/main/res/layout/fragment_game_properties.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout + 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="match_parent" + android:background="?attr/colorSurface"> + + <androidx.core.widget.NestedScrollView + android:id="@+id/list_all" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="vertical" + android:fadeScrollbars="false" + android:clipToPadding="false"> + + <LinearLayout + android:id="@+id/layout_all" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:gravity="center_horizontal"> + + <Button + android:id="@+id/button_back" + style="?attr/materialIconButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:layout_gravity="start" + app:icon="@drawable/ic_back" + app:iconSize="24dp" + app:iconTint="?attr/colorOnSurface" /> + + <com.google.android.material.card.MaterialCardView + style="?attr/materialCardViewElevatedStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:cardCornerRadius="4dp" + app:cardElevation="4dp"> + + <ImageView + android:id="@+id/image_game_screen" + android:layout_width="175dp" + android:layout_height="175dp" + tools:src="@drawable/default_icon"/> + + </com.google.android.material.card.MaterialCardView> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/title" + style="@style/TextAppearance.Material3.TitleMedium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:layout_marginBottom="12dp" + android:layout_marginHorizontal="16dp" + android:ellipsize="none" + android:marqueeRepeatLimit="marquee_forever" + android:requiresFadingEdge="horizontal" + android:singleLine="true" + android:textAlignment="center" + tools:text="deko_basic" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/list_properties" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:listitem="@layout/card_simple_outlined" /> + + </LinearLayout> + + </androidx.core.widget.NestedScrollView> + + <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton + android:id="@+id/button_start" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/start" + app:icon="@drawable/ic_play" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/src/android/app/src/main/res/layout/list_item_addon.xml b/src/android/app/src/main/res/layout/list_item_addon.xml new file mode 100644 index 000000000..74ca04ef1 --- /dev/null +++ b/src/android/app/src/main/res/layout/list_item_addon.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/addon_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/selectableItemBackground" + android:focusable="true" + android:paddingHorizontal="20dp" + android:paddingVertical="16dp"> + + <LinearLayout + android:id="@+id/text_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="@+id/addon_switch" + app:layout_constraintEnd_toStartOf="@+id/addon_switch" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@+id/addon_switch"> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/title" + style="@style/TextAppearance.Material3.HeadlineMedium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAlignment="viewStart" + android:textSize="17sp" + app:lineHeight="28dp" + tools:text="1440p Resolution" /> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/version" + style="@style/TextAppearance.Material3.BodySmall" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_small" + android:textAlignment="viewStart" + tools:text="1.0.0" /> + + </LinearLayout> + + <com.google.android.material.materialswitch.MaterialSwitch + android:id="@+id/addon_switch" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:focusable="true" + android:gravity="center" + android:nextFocusLeft="@id/addon_container" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/text_container" + app:layout_constraintTop_toTopOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/src/android/app/src/main/res/layout/list_item_setting.xml b/src/android/app/src/main/res/layout/list_item_setting.xml index 544280e75..1f80682f1 100644 --- a/src/android/app/src/main/res/layout/list_item_setting.xml +++ b/src/android/app/src/main/res/layout/list_item_setting.xml @@ -62,6 +62,16 @@ android:textSize="13sp" tools:text="1x" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/button_clear" + style="@style/Widget.Material3.Button.TonalButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:visibility="gone" + android:text="@string/clear" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> diff --git a/src/android/app/src/main/res/layout/list_item_setting_switch.xml b/src/android/app/src/main/res/layout/list_item_setting_switch.xml index a8f5aff78..5cb84182e 100644 --- a/src/android/app/src/main/res/layout/list_item_setting_switch.xml +++ b/src/android/app/src/main/res/layout/list_item_setting_switch.xml @@ -10,41 +10,62 @@ android:minHeight="72dp" android:padding="16dp"> - <com.google.android.material.materialswitch.MaterialSwitch - android:id="@+id/switch_widget" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentEnd="true" - android:layout_centerVertical="true" /> - <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_alignParentTop="true" - android:layout_centerVertical="true" - android:layout_marginEnd="24dp" - android:layout_toStartOf="@+id/switch_widget" - android:gravity="center_vertical" android:orientation="vertical"> - <com.google.android.material.textview.MaterialTextView - android:id="@+id/text_setting_name" - style="@style/TextAppearance.Material3.HeadlineMedium" - android:layout_width="wrap_content" + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:textAlignment="viewStart" - android:textSize="17sp" - app:lineHeight="28dp" - tools:text="@string/frame_limit_enable" /> - - <com.google.android.material.textview.MaterialTextView - android:id="@+id/text_setting_description" - style="@style/TextAppearance.Material3.BodySmall" + android:orientation="horizontal"> + + <LinearLayout + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="24dp" + android:gravity="center_vertical" + android:orientation="vertical" + android:layout_weight="1"> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/text_setting_name" + style="@style/TextAppearance.Material3.HeadlineMedium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAlignment="viewStart" + android:textSize="17sp" + app:lineHeight="28dp" + tools:text="@string/frame_limit_enable" /> + + <com.google.android.material.textview.MaterialTextView + android:id="@+id/text_setting_description" + style="@style/TextAppearance.Material3.BodySmall" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_small" + android:textAlignment="viewStart" + tools:text="@string/frame_limit_enable_description" /> + + </LinearLayout> + + <com.google.android.material.materialswitch.MaterialSwitch + android:id="@+id/switch_widget" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical"/> + + </LinearLayout> + + <com.google.android.material.button.MaterialButton + android:id="@+id/button_clear" + style="@style/Widget.Material3.Button.TonalButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" - android:textAlignment="viewStart" - tools:text="@string/frame_limit_enable_description" /> + android:layout_marginTop="16dp" + android:text="@string/clear" + android:visibility="gone" + tools:visibility="visible" /> </LinearLayout> diff --git a/src/android/app/src/main/res/menu/menu_in_game.xml b/src/android/app/src/main/res/menu/menu_in_game.xml index f98f727b6..ac6ab06ff 100644 --- a/src/android/app/src/main/res/menu/menu_in_game.xml +++ b/src/android/app/src/main/res/menu/menu_in_game.xml @@ -12,6 +12,11 @@ android:title="@string/preferences_settings" /> <item + android:id="@+id/menu_settings_per_game" + android:icon="@drawable/ic_settings_outline" + android:title="@string/per_game_settings" /> + + <item android:id="@+id/menu_overlay_controls" android:icon="@drawable/ic_controller" android:title="@string/emulation_input_overlay" /> diff --git a/src/android/app/src/main/res/navigation/emulation_navigation.xml b/src/android/app/src/main/res/navigation/emulation_navigation.xml index cfc494b3f..2f8c3fa0d 100644 --- a/src/android/app/src/main/res/navigation/emulation_navigation.xml +++ b/src/android/app/src/main/res/navigation/emulation_navigation.xml @@ -15,6 +15,10 @@ app:argType="org.yuzu.yuzu_emu.model.Game" app:nullable="true" android:defaultValue="@null" /> + <argument + android:name="custom" + app:argType="boolean" + android:defaultValue="false" /> </fragment> <activity diff --git a/src/android/app/src/main/res/navigation/home_navigation.xml b/src/android/app/src/main/res/navigation/home_navigation.xml index cf70b4bc4..37a03a8d1 100644 --- a/src/android/app/src/main/res/navigation/home_navigation.xml +++ b/src/android/app/src/main/res/navigation/home_navigation.xml @@ -77,6 +77,10 @@ app:argType="org.yuzu.yuzu_emu.model.Game" app:nullable="true" android:defaultValue="@null" /> + <argument + android:name="custom" + app:argType="boolean" + android:defaultValue="false" /> </activity> <action @@ -107,7 +111,13 @@ <fragment android:id="@+id/driverManagerFragment" android:name="org.yuzu.yuzu_emu.fragments.DriverManagerFragment" - android:label="DriverManagerFragment" /> + android:label="DriverManagerFragment" > + <argument + android:name="game" + app:argType="org.yuzu.yuzu_emu.model.Game" + app:nullable="true" + android:defaultValue="@null" /> + </fragment> <fragment android:id="@+id/appletLauncherFragment" android:name="org.yuzu.yuzu_emu.fragments.AppletLauncherFragment" @@ -124,5 +134,41 @@ android:id="@+id/gameFoldersFragment" android:name="org.yuzu.yuzu_emu.fragments.GameFoldersFragment" android:label="GameFoldersFragment" /> + <fragment + android:id="@+id/perGamePropertiesFragment" + android:name="org.yuzu.yuzu_emu.fragments.GamePropertiesFragment" + android:label="PerGamePropertiesFragment" > + <argument + android:name="game" + app:argType="org.yuzu.yuzu_emu.model.Game" /> + <action + android:id="@+id/action_perGamePropertiesFragment_to_gameInfoFragment" + app:destination="@id/gameInfoFragment" /> + <action + android:id="@+id/action_perGamePropertiesFragment_to_addonsFragment" + app:destination="@id/addonsFragment" /> + <action + android:id="@+id/action_perGamePropertiesFragment_to_driverManagerFragment" + app:destination="@id/driverManagerFragment" /> + </fragment> + <action + android:id="@+id/action_global_perGamePropertiesFragment" + app:destination="@id/perGamePropertiesFragment" /> + <fragment + android:id="@+id/gameInfoFragment" + android:name="org.yuzu.yuzu_emu.fragments.GameInfoFragment" + android:label="GameInfoFragment" > + <argument + android:name="game" + app:argType="org.yuzu.yuzu_emu.model.Game" /> + </fragment> + <fragment + android:id="@+id/addonsFragment" + android:name="org.yuzu.yuzu_emu.fragments.AddonsFragment" + android:label="AddonsFragment" > + <argument + android:name="game" + app:argType="org.yuzu.yuzu_emu.model.Game" /> + </fragment> </navigation> diff --git a/src/android/app/src/main/res/values/dimens.xml b/src/android/app/src/main/res/values/dimens.xml index 380d14213..992b5ae44 100644 --- a/src/android/app/src/main/res/values/dimens.xml +++ b/src/android/app/src/main/res/values/dimens.xml @@ -13,7 +13,7 @@ <dimen name="menu_width">256dp</dimen> <dimen name="card_width">165dp</dimen> <dimen name="icon_inset">24dp</dimen> - <dimen name="spacing_bottom_list_fab">76dp</dimen> + <dimen name="spacing_bottom_list_fab">96dp</dimen> <dimen name="spacing_fab">24dp</dimen> <dimen name="dialog_margin">20dp</dimen> diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index a6ccef8a1..c86c43df2 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -91,7 +91,10 @@ <string name="notification_no_directory_link_description">Please locate the user folder with the file manager\'s side panel manually.</string> <string name="manage_save_data">Manage save data</string> <string name="manage_save_data_description">Save data found. Please select an option below.</string> + <string name="import_save_warning">Import save data</string> + <string name="import_save_warning_description">This will overwrite all existing save data with the provided file. Are you sure that you want to continue?</string> <string name="import_export_saves_description">Import or export save files</string> + <string name="save_files_importing">Importing save files…</string> <string name="save_files_exporting">Exporting save files…</string> <string name="save_file_imported_success">Imported successfully</string> <string name="save_file_invalid_zip_structure">Invalid save directory structure</string> @@ -266,6 +269,11 @@ <string name="delete">Delete</string> <string name="edit">Edit</string> <string name="export_success">Exported successfully</string> + <string name="start">Start</string> + <string name="clear">Clear</string> + <string name="global">Global</string> + <string name="custom">Custom</string> + <string name="notice">Notice</string> <!-- GPU driver installation --> <string name="select_gpu_driver">Select GPU driver</string> @@ -291,6 +299,44 @@ <string name="preferences_debug">Debug</string> <string name="preferences_debug_description">CPU/GPU debugging, graphics API, fastmem</string> + <!-- Game properties --> + <string name="info">Info</string> + <string name="info_description">Program ID, developer, version</string> + <string name="per_game_settings">Per-game settings</string> + <string name="per_game_settings_description">Edit settings specific to this game</string> + <string name="launch_options">Launch config</string> + <string name="path">Path</string> + <string name="program_id">Program ID</string> + <string name="developer">Developer</string> + <string name="version">Version</string> + <string name="copy_details">Copy details</string> + <string name="add_ons">Add-ons</string> + <string name="add_ons_description">Toggle mods, updates and DLC</string> + <string name="clear_shader_cache">Clear shader cache</string> + <string name="clear_shader_cache_description">Removes all shaders built while playing this game</string> + <string name="clear_shader_cache_warning_description">You will experience more stuttering as the shader cache regenerates</string> + <string name="cleared_shaders_successfully">Cleared shaders successfully</string> + <string name="addons_game">Addons: %1$s</string> + <string name="save_data">Save data</string> + <string name="save_data_description">Manage save data specific to this game</string> + <string name="delete_save_data">Delete save data</string> + <string name="delete_save_data_description">Removes all save data specific to this game</string> + <string name="delete_save_data_warning_description">This irrecoverably removes all of this game\'s save data. Are you sure you want to continue?</string> + <string name="save_data_deleted_successfully">Save data deleted successfully</string> + <string name="select_content_type">Content type</string> + <string name="updates_and_dlc">Updates and DLC</string> + <string name="mods_and_cheats">Mods and cheats</string> + <string name="addon_notice">Important addon notice</string> + <!-- "cheats/" "romfs/" and "exefs/ should not be translated --> + <string name="addon_notice_description">In order to install mods and cheats, you must select a folder that contains a cheats/, romfs/, or exefs/ directory. We can\'t verify if these will be compatible with your game so be careful!</string> + <string name="invalid_directory">Invalid directory</string> + <!-- "cheats/" "romfs/" and "exefs/ should not be translated --> + <string name="invalid_directory_description">Please make sure that the directory you selected contains a cheats/, romfs/, or exefs/ folder and try again.</string> + <string name="addon_installed_successfully">Addon installed successfully</string> + <string name="verifying_content">Verifying content…</string> + <string name="content_install_notice">Content install notice</string> + <string name="content_install_notice_description">The content that you selected does not match this game.\nInstall anyway?</string> + <!-- ROM loading errors --> <string name="loader_error_encrypted">Your ROM is encrypted</string> <string name="loader_error_encrypted_roms_description"><![CDATA[Please follow the guides to redump your <a href="https://yuzu-emu.org/help/quickstart/#dumping-physical-titles-game-cards">game cartidges</a> or <a href="https://yuzu-emu.org/help/quickstart/#dumping-digital-titles-eshop">installed titles</a>.]]></string> @@ -369,6 +415,7 @@ <!-- Memory Sizes --> <string name="memory_byte">Byte</string> + <string name="memory_byte_shorthand">B</string> <string name="memory_kilobyte">KB</string> <string name="memory_megabyte">MB</string> <string name="memory_gigabyte">GB</string> |