Initial Commit

This commit is contained in:
Alexander Doerflinger
2026-01-28 12:33:38 +01:00
commit a4a42fc73f
93 changed files with 10832 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pressed State -->
<item android:state_pressed="true">
<shape>
<solid android:color="@color/text_primary" />
<corners android:radius="@dimen/radius_m" />
</shape>
</item>
<!-- Default State -->
<item>
<shape>
<solid android:color="@color/surface_secondary" />
<stroke android:width="1dp" android:color="@color/border_subtle" />
<corners android:radius="@dimen/radius_m" />
</shape>
</item>
</selector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#40000000"> <!-- Dark ripple on bright green -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/volt_green" />
<corners android:radius="@dimen/radius_l" />
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M8.59,16.59L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.59Z" />
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9H1l3.89,3.89 0.07,0.14L9,12H6c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08V8H12z" />
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#0A0A0A"
android:pathData="M0,0h108v108h-108z" />
</vector>

View File

@@ -0,0 +1,51 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M128,0L384,0A128,128 0,0 1,512 128L512,384A128,128 0,0 1,384 512L128,512A128,128 0,0 1,0 384L0,128A128,128 0,0 1,128 0z"
android:fillColor="#0A0A0A"/>
<path
android:pathData="M256,256m-180,0a180,180 0,1 1,360 0a180,180 0,1 1,-360 0"
android:strokeAlpha="0.15"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#D4FF00"
android:fillAlpha="0.15"/>
<path
android:pathData="M254,160h4v192h-4z"
android:strokeAlpha="0.2"
android:fillColor="#D4FF00"
android:fillAlpha="0.2"/>
<path
android:pathData="M256,100L220,240L256,265L292,240L256,100Z"
android:strokeAlpha="0.9"
android:fillColor="#D4FF00"
android:fillAlpha="0.9"/>
<path
android:pathData="M256,412L292,272L256,247L220,272L256,412Z"
android:strokeAlpha="0.7"
android:fillColor="#D4FF00"
android:fillAlpha="0.7"/>
<path
android:pathData="M100,256L240,292L265,256L240,220L100,256Z"
android:strokeAlpha="0.5"
android:fillColor="#D4FF00"
android:fillAlpha="0.5"/>
<path
android:pathData="M412,256L272,220L247,256L272,292L412,256Z"
android:strokeAlpha="0.5"
android:fillColor="#D4FF00"
android:fillAlpha="0.5"/>
<path
android:pathData="M256,256m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"
android:fillColor="#D4FF00"/>
<path
android:pathData="M256,256m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"
android:strokeAlpha="0.4"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#D4FF00"
android:fillAlpha="0.4"/>
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M8,5v14l11,-7z" />
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.13,5.91 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87c-0.11,0.21 -0.06,0.47 0.12,0.61l2.03,1.58C4.84,11.36 4.82,11.68 4.82,12c0,0.32 0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.11,-0.21 0.06,-0.47 -0.12,-0.61L19.14,12.94zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5s3.5,1.57 3.5,3.5S13.93,15.5 12,15.5z" />
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5 5,-2.24 5,-5 -2.24,-5 -5,-5zM12,15c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3z" />
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5s-3,1.34 -3,3 1.34,3 3,3zM8,11c1.66,0 3,-1.34 3,-3S9.66,5 8,5 5,6.34 5,8s1.34,3 3,3zM8,13c-2.33,0 -7,1.17 -7,3.5V19h14v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5zM16,13c-0.29,0 -0.62,0.02 -0.97,0.05 1.16,0.84 1.97,1.97 1.97,3.45V19h6v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5z" />
</vector>

View File

@@ -0,0 +1,48 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M256,256m-180,0a180,180 0,1 1,360 0a180,180 0,1 1,-360 0"
android:strokeAlpha="0.15"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#D4FF00"
android:fillAlpha="0.15"/>
<path
android:pathData="M254,160h4v192h-4z"
android:strokeAlpha="0.2"
android:fillColor="#D4FF00"
android:fillAlpha="0.2"/>
<path
android:pathData="M256,100L220,240L256,265L292,240L256,100Z"
android:strokeAlpha="0.9"
android:fillColor="#D4FF00"
android:fillAlpha="0.9"/>
<path
android:pathData="M256,412L292,272L256,247L220,272L256,412Z"
android:strokeAlpha="0.7"
android:fillColor="#D4FF00"
android:fillAlpha="0.7"/>
<path
android:pathData="M100,256L240,292L265,256L240,220L100,256Z"
android:strokeAlpha="0.5"
android:fillColor="#D4FF00"
android:fillAlpha="0.5"/>
<path
android:pathData="M412,256L272,220L247,256L272,292L412,256Z"
android:strokeAlpha="0.5"
android:fillColor="#D4FF00"
android:fillAlpha="0.5"/>
<path
android:pathData="M256,256m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"
android:fillColor="#D4FF00"/>
<path
android:pathData="M256,256m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"
android:strokeAlpha="0.4"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#D4FF00"
android:fillAlpha="0.4"/>
</vector>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#1A007AFF" /> <!-- Electric Blue transparent background -->
<stroke android:width="1dp" android:color="#40D4FF00" /> <!-- Subtle Volt border -->
<corners android:radius="16dp" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#1A000000" /> <!-- 10% Black overlay -->
<stroke android:width="1dp" android:color="#1A000000" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#1AFFFFFF" /> <!-- Subtle glow/fill -->
<stroke android:width="1dp" android:color="@color/volt_green" />
<corners android:radius="16dp" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp" android:color="@color/text_dim" />
<corners android:radius="16dp" />
<solid android:color="@android:color/transparent" />
</shape>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- Transparent background for the empty state -->
<solid android:color="@color/surface_secondary" />
<!-- Dashed stroke definition -->
<stroke
android:width="2dp"
android:color="@color/border_subtle"
android:dashWidth="8dp"
android:dashGap="8dp" />
<!-- Matching the corner radius of the other cards -->
<corners android:radius="@dimen/radius_l" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/surface_primary" />
<stroke android:width="1dp" android:color="#1AFFFFFF" />
<corners android:radius="8dp" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/volt_green" />
<corners android:radius="12dp" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- High-visibility highlight for Triple mode -->
<solid android:color="@color/triple_blue" />
<corners android:radius="12dp" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- High-visibility highlight for Double mode -->
<solid android:color="@color/double_red" />
<corners android:radius="12dp" />
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- The base background for the multiplier toggle bar -->
<solid android:color="@color/surface_secondary" />
<corners android:radius="16dp" />
<stroke
android:width="1dp"
android:color="@color/border_subtle" />
</shape>

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:background="@color/midnight_black">
<!-- FORM VIEW -->
<LinearLayout
android:id="@+id/layoutForm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp"
android:gravity="center_horizontal">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_create_profile_header"
android:textAppearance="@style/TextAppearance.Oche.Headline"
android:layout_marginBottom="32dp"/>
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/ivAddPlayerProfile"
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@color/surface_secondary"
android:src="@drawable/ic_users"
app:tint="@color/text_dim"
app:shapeAppearanceOverlay="@style/ShapeAppearance.MaterialComponents.MediumComponent"
app:strokeColor="@color/volt_green"
app:strokeWidth="2dp" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/surface_secondary"
android:hint="@string/txt_create_profile_username_hint"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSavePlayer"
style="@style/Widget.Oche_Button_Primary"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginTop="32dp"
android:text="@string/txt_create_profile_username_save" />
</LinearLayout>
<!-- CROPPER VIEW -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layoutCropper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<ImageView
android:id="@+id/ivCropPreview"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitCenter"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<!-- Corrected package reference -->
<com.aldo.apps.ochecompanion.ui.CropOverlayView
android:id="@+id/cropOverlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="24dp"
app:layout_constraintBottom_toBottomOf="parent">
<Button
android:id="@+id/btnCancelCrop"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="@string/txt_cancel_crop"
android:backgroundTint="@color/surface_secondary" />
<Button
android:id="@+id/btnConfirmCrop"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@string/txt_confirm_crop"
android:backgroundTint="@color/volt_green"
android:textColor="@color/midnight_black" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@@ -0,0 +1,158 @@
<?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="@color/background_primary">
<!-- 1. HIGH-IMPACT SCOREBOARD (TOP) -->
<LinearLayout
android:id="@+id/scoreContainer"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/surface_primary"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tvPlayerName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-black"
android:letterSpacing="0.3"
android:textColor="@color/text_secondary"
android:textSize="11sp"
tools:text="SNAKEBITE" />
<TextView
android:id="@+id/tvScorePrimary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="monospace"
android:letterSpacing="-0.08"
android:textColor="@color/volt_green"
android:textSize="100sp"
android:textStyle="bold"
tools:text="501" />
<TextView
android:id="@+id/tvLegAvg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_dim"
android:textSize="10sp"
tools:text="AVG: 0.0" />
</LinearLayout>
<!-- 2. TRACKER BAR -->
<LinearLayout
android:id="@+id/trackerBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:padding="12dp"
app:layout_constraintTop_toBottomOf="@id/scoreContainer">
<TextView android:id="@+id/tvDart1" style="@style/Oche_DartPill" />
<TextView android:id="@+id/tvDart2" style="@style/Oche_DartPill" android:layout_marginHorizontal="12dp" />
<TextView android:id="@+id/tvDart3" style="@style/Oche_DartPill" />
<ImageButton
android:id="@+id/btnUndoDart"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="24dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_history"
app:tint="@color/text_dim" />
</LinearLayout>
<!-- 3. INTERACTIVE INPUT ZONE (STUCK TO BOTTOM) -->
<LinearLayout
android:id="@+id/bottomSection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@android:color/transparent"
app:layout_constraintBottom_toBottomOf="parent">
<!-- MULTIPLIER BAR (Directly above the keyboard stack) -->
<LinearLayout
android:id="@+id/multiplierLayout"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginHorizontal="20dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_round_surface"
android:padding="4dp">
<TextView android:id="@+id/btnMultiplierSingle" style="@style/Oche_Multiplier_Label" android:text="@string/txt_game_btn_single" />
<TextView android:id="@+id/btnMultiplierDouble" style="@style/Oche_Multiplier_Label" android:text="@string/txt_game_btn_double" android:layout_marginHorizontal="2dp" />
<TextView android:id="@+id/btnMultiplierTriple" style="@style/Oche_Multiplier_Label" android:text="@string/txt_game_btn_triple" />
</LinearLayout>
<!-- SMART ROUTE (Nested here to appear between multipliers and keys when active) -->
<LinearLayout
android:id="@+id/layoutCheckoutSuggestion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginBottom="12dp"
android:background="@drawable/shape_checkout_glow"
android:gravity="center"
android:padding="12dp"
android:visibility="gone">
<TextView
android:id="@+id/tvCheckoutSuggestion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-black"
android:textColor="@color/volt_green"
android:textSize="13sp"
tools:text="T20 • T19 • D12" />
</LinearLayout>
<!-- THE SEAMLESS GRID -->
<GridLayout
android:id="@+id/glKeyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:columnCount="4"
android:rowCount="5"
android:useDefaultMargins="false">
<!-- Buttons inflated via setupKeyboard() in GameActivity -->
</GridLayout>
<!-- FINAL ACTIONS -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="72dp"
android:orientation="horizontal"
android:paddingHorizontal="14dp"
android:paddingBottom="12dp"
android:layout_marginTop="4dp">
<Button
android:id="@+id/btnBull"
android:layout_width="90dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:backgroundTint="@color/surface_primary"
android:onClick="onBullTap"
android:text="@string/txt_game_btn_bull"
android:fontFamily="sans-serif-black"
android:textColor="@color/double_red" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSubmitTurn"
style="@style/Widget.Oche_Button_Primary"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:layout_weight="1"
android:text="@string/txt_game_btn_submit"
app:icon="@drawable/ic_chevron_right"
app:iconGravity="end" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,158 @@
<?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="@color/background_primary"
tools:context=".MainMenuActivity"
android:id="@+id/main">
<!-- Top Bar -->
<LinearLayout
android:id="@+id/topBar"
android:layout_width="match_parent"
android:layout_height="72dp"
android:background="@color/surface_primary"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/spacing_m"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/oche_logo"
android:contentDescription="@string/cd_txt_oche_logo"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_s"
android:layout_weight="1"
android:fontFamily="sans-serif-black"
android:text="@string/app_name"
android:textAllCaps="true"
android:textColor="@color/text_primary"
android:textSize="20sp"
android:letterSpacing="0.05" />
<ImageButton
android:id="@+id/btnSettings"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_settings"
app:tint="@color/text_secondary"
android:contentDescription="@string/cd_txt_settings_button"/>
</LinearLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/bottomNav"
app:layout_constraintTop_toBottomOf="@id/topBar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/spacing_m">
<!-- Hero Section: Quick Start -->
<com.aldo.apps.ochecompanion.ui.QuickStartButton
android:id="@+id/quick_start_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Squad Section -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="bottom"
android:layout_marginBottom="@dimen/spacing_m">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.Oche.Caption"
android:text="@string/txt_squad_title" />
<TextView
android:id="@+id/btnAddPlayer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_squad_add"
android:textColor="@color/volt_green"
android:textStyle="bold"
android:textSize="12sp"
android:textAllCaps="true"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSquad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/item_player_small"
android:layout_marginBottom="@dimen/spacing_xl"/>
<!-- Last Match Section -->
<com.aldo.apps.ochecompanion.ui.MatchRecapView
android:id="@+id/match_recap"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<!-- Bottom Navigation Mock -->
<LinearLayout
android:id="@+id/bottomNav"
android:layout_width="match_parent"
android:layout_height="64dp"
android:background="@color/surface_primary"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:src="@drawable/ic_target"
app:tint="@color/volt_green"/>
</FrameLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:src="@drawable/ic_users"
app:tint="@color/text_dim"/>
</FrameLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:src="@drawable/ic_history"
app:tint="@color/text_dim"/>
</FrameLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:parentTag="com.google.android.material.card.MaterialCardView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/ivPlayerProfile"
android:layout_width="56dp"
android:layout_height="56dp"
android:background="@color/surface_secondary"
app:shapeAppearanceOverlay="@style/ShapeAppearance.MaterialComponents.SmallComponent"
app:strokeColor="@color/border_subtle"
app:strokeWidth="1dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tvPlayerName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
android:textColor="@color/text_primary"
android:textStyle="bold"
tools:text="Snakebite" />
<TextView
android:id="@+id/tvPlayerAvg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.Oche.Caption"
tools:text="AVG: 94.2" />
</LinearLayout>
<ImageView
android:id="@+id/ivChevron"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_chevron_right"
app:tint="@color/text_dim" />
</LinearLayout>
</merge>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.button.MaterialButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="0dp"
android:layout_height="56dp"
android:layout_columnWeight="1"
android:layout_margin="1dp"
android:insetTop="0dp"
android:insetBottom="0dp"
android:insetLeft="0dp"
android:insetRight="0dp"
app:cornerRadius="8dp"
app:strokeWidth="1dp"
app:strokeColor="@color/border_subtle"
android:backgroundTint="@android:color/transparent"
android:textColor="@color/text_primary"
android:textSize="22sp"
android:fontFamily="sans-serif-black"
android:stateListAnimator="@null"
style="@style/Widget.MaterialComponents.Button.UnelevatedButton" />

View File

@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="android.widget.FrameLayout">
<!-- EMPTY STATE -->
<LinearLayout
android:id="@+id/stateEmpty"
style="@style/Widget.Oche.Card"
android:layout_width="match_parent"
android:layout_height="140dp"
android:background="@drawable/shape_dashed_border"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:alpha="0.5"
android:contentDescription="@string/cd_text_historic_record"
android:src="@drawable/ic_history"
app:tint="@color/text_primary" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:alpha="0.5"
android:text="@string/txt_no_matches"
android:textAppearance="@style/TextAppearance.Oche.Caption"
android:textColor="@color/text_primary" />
</LinearLayout>
<!-- 1v1 STATE -->
<androidx.cardview.widget.CardView
android:id="@+id/state1v1"
style="@style/Widget.Oche.Card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_dashed_border"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:padding="24dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/tvP1Score"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:textAppearance="@style/TextAppearance.Oche.Hero"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="501" />
<TextView
android:id="@+id/tvP1Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textAppearance="@style/TextAppearance.Oche.Caption"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvP1Score"
tools:text="Snakebite" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:text="@string/txt_match_vs"
android:textColor="@color/text_dim"
android:textStyle="bold|italic" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/tvP2Score"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alpha="0.5"
android:gravity="center"
android:textAppearance="@style/TextAppearance.Oche.Hero"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="342" />
<TextView
android:id="@+id/tvP2Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textAppearance="@style/TextAppearance.Oche.Caption"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvP2Score"
tools:text="MVG" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- GROUP STATE -->
<androidx.cardview.widget.CardView
android:id="@+id/stateGroup"
style="@style/Widget.Oche.Card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_group_match_header"
android:textAppearance="@style/TextAppearance.Oche.Caption"
android:textColor="@color/volt_green" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvLeaderboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</merge>

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="android.widget.FrameLayout">
<!-- The Container -->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="110dp"
android:background="@drawable/btn_primary_volt"
android:padding="24dp">
<!-- Text Group -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iconContainer"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tvQuickStartMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-black"
android:text="@string/txt_quick_start_title"
android:textColor="@color/midnight_black"
android:textSize="28sp"
android:letterSpacing="-0.02"
android:textStyle="italic" />
<TextView
android:id="@+id/tvQuickStartSub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.7"
android:fontFamily="sans-serif-medium"
android:text="STANDARD 501 • DOUBLE OUT"
android:textColor="@color/midnight_black"
android:textSize="11sp"
android:textAllCaps="true"
android:letterSpacing="0.1" />
</LinearLayout>
<!-- Play Icon Circle -->
<FrameLayout
android:id="@+id/iconContainer"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/shape_circle_overlay"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:layout_marginStart="2dp"
android:src="@drawable/ic_play"
app:tint="@color/midnight_black" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</merge>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Brand Identity (Dark) -->
<color name="volt_green">#D4FF00</color> <!-- Vibrant volt -->
<color name="background_primary">#0A0A0A</color> <!-- True black -->
<color name="surface_primary">#121212</color> <!-- Charcoal headers -->
<color name="surface_secondary">#1E1E1E</color> <!-- Slate cards -->
<!-- Contextual Colors -->
<color name="triple_blue">#007AFF</color>
<color name="double_red">#FF3B30</color>
<!-- Typography & UI -->
<color name="text_primary">#FFFFFF</color>
<color name="text_secondary">#A0A0A0</color>
<color name="text_dim">#48484A</color>
<color name="border_subtle">#1AFFFFFF</color>
</resources>

View File

@@ -0,0 +1,2 @@
<resources>
</resources>

View File

@@ -0,0 +1,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.OcheCompanion" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
</style>
</resources>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Brand Identity (Light) -->
<color name="volt_green">#B3D900</color> <!-- Deeper volt for white contrast -->
<color name="background_primary">#F2F2F7</color> <!-- Soft light gray -->
<color name="surface_primary">#FFFFFF</color> <!-- Pure white cards -->
<color name="surface_secondary">#E5E5EA</color> <!-- Light gray inputs -->
<color name="midnight_black">#0A0A0A</color> <!-- Real black for OLED DIsplays -->
<!-- Contextual Colors -->
<color name="triple_blue">#0056B3</color>
<color name="double_red">#D70015</color>
<!-- Typography & UI -->
<color name="text_primary">#1C1C1E</color>
<color name="text_secondary">#6E6E73</color>
<color name="text_dim">#AEAEB2</color>
<color name="text_on_volt">#1C1C1E</color>
<color name="border_subtle">#1F000000</color>
<color name="light_blue_400">#FF29B6F6</color>
<color name="light_blue_600">#FF039BE5</color>
<color name="gray_400">#FFBDBDBD</color>
<color name="gray_600">#FF757575</color>
</resources>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Text Sizes -->
<dimen name="text_hero">48sp</dimen>
<dimen name="text_headline">24sp</dimen>
<dimen name="text_subhead">16sp</dimen>
<dimen name="text_body">14sp</dimen>
<dimen name="text_caption">12sp</dimen>
<dimen name="text_micro">10sp</dimen>
<!-- Spacing -->
<dimen name="spacing_xs">4dp</dimen>
<dimen name="spacing_s">8dp</dimen>
<dimen name="spacing_m">16dp</dimen>
<dimen name="spacing_l">24dp</dimen>
<dimen name="spacing_xl">32dp</dimen>
<!-- Component Specs -->
<dimen name="radius_m">12dp</dimen>
<dimen name="radius_l">24dp</dimen>
<dimen name="button_height">56dp</dimen>
<dimen name="card_elevation">4dp</dimen>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#0A0A0A</color>
</resources>

View File

@@ -0,0 +1,36 @@
<resources>
<string name="app_name" translatable="false">Oche Companion</string>
<!-- Main menu -->
<string name="txt_quick_start_header">Immediate Action</string>
<string name="txt_quick_start_title">Quick start</string>
<string name="txt_quick_start_subtitle">Start %s</string>
<string name="txt_squad_title">Your Squad</string>
<string name="txt_squad_add">+ Add New</string>
<string name="txt_history_title">Last Match</string>
<string name="txt_no_matches">No matches yet</string>
<string name="txt_match_vs">VS</string>
<string name="txt_group_match_header">Group Standings</string>
<string name="txt_player_average_base">AVG: %.1f</string>
<!-- Add Player -->
<string name="txt_create_profile_header">Create Profile</string>
<string name="txt_create_profile_username_hint">Add your username</string>
<string name="txt_create_profile_username_save">Save to Squad</string>
<string name="txt_update_profile_header">Update Profile</string>
<string name="txt_update_profile_username_save">Update Squad</string>
<string name="txt_cancel_crop">Cancel</string>
<string name="txt_confirm_crop">Confirm Crop</string>
<!-- GameActivity -->
<string name="txt_game_btn_single">Single</string>
<string name="txt_game_btn_double">Double</string>
<string name="txt_game_btn_triple">Triple</string>
<string name="txt_game_btn_bull">Bull</string>
<string name="txt_game_btn_submit">Submit Turn</string>
<!-- Image Content description -->
<string name="cd_txt_oche_logo">Application Logo</string>
<string name="cd_txt_settings_button">Settings</string>
<string name="cd_text_historic_record">Match History</string>
</resources>

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Giant Score Numbers -->
<style name="TextAppearance.Oche.Hero" parent="TextAppearance.MaterialComponents.Headline1">
<item name="android:textSize">@dimen/text_hero</item>
<item name="android:textStyle">bold</item>
<item name="android:fontFamily">monospace</item> <!-- For fixed width scores -->
<item name="android:textColor">@color/text_primary</item>
<item name="android:letterSpacing">-0.05</item>
</style>
<!-- Section Headers -->
<style name="TextAppearance.Oche.Headline" parent="TextAppearance.MaterialComponents.Headline5">
<item name="android:textSize">@dimen/text_headline</item>
<item name="android:textStyle">bold</item>
<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textColor">@color/text_primary</item>
</style>
<!-- Metadata / Stats Labels -->
<style name="TextAppearance.Oche.Caption" parent="TextAppearance.MaterialComponents.Caption">
<item name="android:textSize">@dimen/text_micro</item>
<item name="android:textStyle">bold</item>
<item name="android:textAllCaps">true</item>
<item name="android:letterSpacing">0.2</item>
<item name="android:textColor">@color/text_secondary</item>
</style>
<!-- The Scoring Grid Tiles -->
<style name="Widget.Oche.Button.Grid" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">80dp</item>
<item name="android:background">@drawable/btn_grid_item</item>
<item name="android:textColor">@color/text_primary</item>
<item name="android:textSize">20sp</item>
<item name="android:textStyle">bold</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
<!-- Player Card Container -->
<style name="Widget.Oche.Card" parent="Widget.MaterialComponents.CardView">
<item name="cardBackgroundColor">@color/surface_secondary</item>
<item name="cardCornerRadius">@dimen/radius_m</item>
<item name="cardElevation">@dimen/card_elevation</item>
<item name="android:layout_margin">@dimen/spacing_s</item>
</style>
<!-- Primary Brand Button (Volt Green) -->
<style name="Widget.Oche_Button_Primary" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/button_height</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="backgroundTint">@null</item>
<item name="android:background">@drawable/btn_primary_volt</item>
<item name="android:textColor">@color/midnight_black</item>
<item name="android:textStyle">bold</item>
<item name="android:letterSpacing">0.1</item>
<item name="cornerRadius">12dp</item>
</style>
<!-- Dart Tracker Pills -->
<style name="Oche_DartPill">
<item name="android:layout_width">50dp</item>
<item name="android:layout_height">32dp</item>
<item name="android:gravity">center</item>
<item name="android:textSize">14sp</item>
<item name="android:fontFamily">sans-serif-black</item>
</style>
<!-- Multiplier Selector Labels -->
<style name="Oche_Multiplier_Label">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:gravity">center</item>
<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textSize">11sp</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">@color/text_secondary</item>
</style>
<!-- Custom Shape Appearance for rounded components -->
<style name="Oche_ShapeAppearance_SmallComponent" parent="ShapeAppearance.MaterialComponents.SmallComponent">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">12dp</item>
</style>
</resources>

View File

@@ -0,0 +1,9 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.OcheCompanion" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
</style>
<style name="Theme.OcheCompanion" parent="Base.Theme.OcheCompanion" />
</resources>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample backup rules file; uncomment and customize as necessary.
See https://developer.android.com/guide/topics/data/autobackup
for details.
Note: This file is ignored for devices older than API 31
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>