Initial Commit
18
app/src/main/res/drawable/btn_grid_item.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/btn_primary_volt.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_chevron_right.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_history.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_launcher_background.xml
Normal 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>
|
||||
51
app/src/main/res/drawable/ic_launcher_foreground.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_play.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_settings.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_target.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/ic_users.xml
Normal 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>
|
||||
48
app/src/main/res/drawable/oche_logo.xml
Normal 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>
|
||||
7
app/src/main/res/drawable/shape_checkout_glow.xml
Normal 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>
|
||||
6
app/src/main/res/drawable/shape_circle_overlay.xml
Normal 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>
|
||||
7
app/src/main/res/drawable/shape_dart_pill_active.xml
Normal 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>
|
||||
7
app/src/main/res/drawable/shape_dart_pill_empty.xml
Normal 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>
|
||||
18
app/src/main/res/drawable/shape_dashed_border.xml
Normal 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>
|
||||
7
app/src/main/res/drawable/shape_keyboard_tile.xml
Normal 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>
|
||||
6
app/src/main/res/drawable/shape_multiplier_active.xml
Normal 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>
|
||||
7
app/src/main/res/drawable/shape_multiplier_blue.xml
Normal 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>
|
||||
7
app/src/main/res/drawable/shape_multiplier_red.xml
Normal 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>
|
||||
10
app/src/main/res/drawable/shape_round_surface.xml
Normal 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>
|
||||
109
app/src/main/res/layout/activity_add_player.xml
Normal 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>
|
||||
158
app/src/main/res/layout/activity_game.xml
Normal 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>
|
||||
158
app/src/main/res/layout/activity_main.xml
Normal 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>
|
||||
55
app/src/main/res/layout/item_player_small.xml
Normal 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>
|
||||
20
app/src/main/res/layout/view_keyboard_button.xml
Normal 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" />
|
||||
149
app/src/main/res/layout/view_match_recap.xml
Normal 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>
|
||||
68
app/src/main/res/layout/view_quick_start.xml
Normal 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>
|
||||
5
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal 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>
|
||||
5
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
Normal 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>
|
||||
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
18
app/src/main/res/values-night/colors.xml
Normal 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>
|
||||
2
app/src/main/res/values-night/styles.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<resources>
|
||||
</resources>
|
||||
7
app/src/main/res/values-night/themes.xml
Normal 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>
|
||||
24
app/src/main/res/values/colors.xml
Normal 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>
|
||||
23
app/src/main/res/values/dimens.xml
Normal 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>
|
||||
4
app/src/main/res/values/ic_launcher_background.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#0A0A0A</color>
|
||||
</resources>
|
||||
36
app/src/main/res/values/strings.xml
Normal 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>
|
||||
90
app/src/main/res/values/styles.xml
Normal 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>
|
||||
9
app/src/main/res/values/themes.xml
Normal 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>
|
||||
13
app/src/main/res/xml/backup_rules.xml
Normal 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>
|
||||
19
app/src/main/res/xml/data_extraction_rules.xml
Normal 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>
|
||||