new dashboard design

This commit is contained in:
MooN 2025-11-18 22:05:34 +06:30
parent 7e2a589636
commit 65eb17e3b9
13 changed files with 296 additions and 213 deletions

View File

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 5,
"versionName": "1.05",
"versionCode": 7,
"versionName": "1.07",
"outputFile": "app-release.apk"
}
],

View File

@ -55,10 +55,11 @@
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.journeyapps.barcodescanner.CaptureActivity"

View File

@ -0,0 +1,22 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="@color/colorPrimary"
android:strokeColor="@color/colorPrimary"
android:strokeWidth="2"
android:pathData="
M 24 0
H 140
A 60 60 0 0 0 200 60
V 176
Q 200 200 176 200
H 24
Q 0 200 0 176
V 24
Q 0 0 24 0
Z" />
</vector>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="@color/colorPrimary"
android:strokeColor="@color/colorPrimary"
android:strokeWidth="2"
android:pathData="
M 60 0
H 176
Q 200 0 200 24
V 176
Q 200 200 176 200
H 24
Q 0 200 0 176
V 60
A 60 60 0 0 1 60 0
Z" />
</vector>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="@color/colorPrimary"
android:strokeColor="@color/colorPrimary"
android:strokeWidth="2"
android:pathData="
M 24 0
H 176
Q 200 0 200 24
V 176
Q 200 200 176 200
H 60
A 60 60 0 0 0 0 140
V 24
Q 0 0 24 0
Z" />
</vector>

View File

@ -0,0 +1,22 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="@color/colorPrimary"
android:strokeColor="@color/colorPrimary"
android:strokeWidth="2"
android:pathData="
M 24 0
H 176
Q 200 0 200 24
V 140
A 60 60 0 0 0 140 200
H 24
Q 0 200 0 176
V 24
Q 0 0 24 0
Z" />
</vector>

View File

@ -0,0 +1,11 @@
<?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="@color/colorPrimary"
android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6z" />
</vector>

View File

@ -8,109 +8,91 @@
<import type="android.view.View"/>
<import type="com.utsmm.kbz.R"/>
<import type="com.utsmm.kbz.util.layout.LayoutDataUtil"/>
<variable
name="shareViewModel"
type="com.utsmm.kbz.ui.core_viewmodel.SharedViewModel" />
<variable
name="mainViewModel"
type="com.utsmm.kbz.MainViewModel" />
<variable
name="click"
type="com.utsmm.kbz.MainFragment.ClickEvent" />
<variable
name="carouselAdapter"
type="androidx.recyclerview.widget.RecyclerView.Adapter" />
<variable
name="myAdapter"
type="com.utsmm.kbz.ui.adapters.MainAdapter" />
<variable name="shareViewModel" type="com.utsmm.kbz.ui.core_viewmodel.SharedViewModel"/>
<variable name="mainViewModel" type="com.utsmm.kbz.MainViewModel"/>
<variable name="click" type="com.utsmm.kbz.MainFragment.ClickEvent"/>
<variable name="carouselAdapter" type="androidx.recyclerview.widget.RecyclerView.Adapter"/>
<variable name="myAdapter" type="com.utsmm.kbz.ui.adapters.MainAdapter"/>
</data>
<!-- ======== ROOT ======== -->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
android:background="@color/colorPrimary"
android:padding="16dp">
<!-- ====================== BANNER ====================== -->
<!-- Banner Section -->
<androidx.cardview.widget.CardView
android:id="@+id/bannerCard"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="24dp"
android:layout_margin="4dp"
app:cardElevation="6dp"
app:cardCornerRadius="16dp"
app:cardElevation="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.25">
app:layout_constraintDimensionRatio="16:6">
<RelativeLayout
<com.denzcoskun.imageslider.ImageSlider
android:id="@+id/image_slider"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.denzcoskun.imageslider.ImageSlider
android:id="@+id/image_slider"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:iss_auto_cycle="true"
app:iss_period="5000"
app:iss_delay="5000"
app:iss_no_dots="true"
app:iss_title_background="@color/transparent" />
<!-- Gradient overlay for better text visibility -->
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
android:layout_height="match_parent"
app:iss_auto_cycle="true"
app:iss_period="5000"
app:iss_delay="5000"
app:iss_no_dots="true"
app:iss_title_background="@color/transparent" />
</androidx.cardview.widget.CardView>
<!-- ============ MAIN GRID 2×2 ============ -->
<!-- ====================== GRID AREA ====================== -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/menuGrid"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="16dp"
app:layout_constraintTop_toBottomOf="@id/bannerCard"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
android:paddingTop="12dp">
<!-- SALE (Top Left) -->
<!-- ===== FULL WIDTH SALE BUTTON ===== -->
<androidx.cardview.widget.CardView
android:id="@+id/cardMenuCard"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="8dp"
app:cardCornerRadius="18dp"
app:cardElevation="4dp"
android:layout_margin="6dp"
android:foreground="?attr/selectableItemBackground"
android:onClick="@{() -> click.onClickCard()}"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="16dp"
app:cardElevation="6dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/settlementMenuCard"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.45">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintDimensionRatio="1:0.4">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="12dp"
android:gravity="center"
android:padding="20dp"
android:background="@color/white">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_width="56dp"
android:layout_height="56dp"
android:src="@drawable/ic_sale"
android:layout_marginBottom="6dp"
app:tint="@color/colorPrimary" />
app:tint="@color/colorPrimary"
android:layout_marginBottom="6dp" />
<TextView
android:layout_width="wrap_content"
@ -122,46 +104,46 @@
android:fontFamily="@font/rubik_medium"
android:textAlignment="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- SETTLEMENT (Top Right) -->
<!-- ===== ROW 1 ===== -->
<!-- Settlement -->
<androidx.cardview.widget.CardView
android:id="@+id/settlementMenuCard"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="8dp"
app:cardCornerRadius="18dp"
app:cardElevation="4dp"
android:layout_margin="6dp"
android:foreground="?attr/selectableItemBackground"
android:onClick="@{() -> click.onClickSettlement()}"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="16dp"
app:cardElevation="6dp"
app:disableBtn="@{mainViewModel.settlementStatus}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/cardMenuCard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.45">
app:layout_constraintTop_toBottomOf="@id/cardMenuCard"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/signOnMenuCard"
app:layout_constraintDimensionRatio="1:0.8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical"
android:padding="12dp"
android:background="@color/white">
android:padding="18dp">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_width="46dp"
android:layout_height="46dp"
android:src="@drawable/ic_settlement"
android:layout_margin="6dp"
app:tint="@color/colorPrimary" />
app:tint="@color/colorPrimary"
android:layout_marginBottom="6dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/menu_settlement"
android:text="@string/menu_sale"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
@ -171,41 +153,40 @@
</androidx.cardview.widget.CardView>
<!-- SIGN ON (Bottom Left) -->
<!-- Sign On -->
<androidx.cardview.widget.CardView
android:id="@+id/signOnMenuCard"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="8dp"
app:cardCornerRadius="18dp"
app:cardElevation="4dp"
android:layout_margin="6dp"
android:foreground="?attr/selectableItemBackground"
android:onClick="@{() -> click.onClickSignOn()}"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="16dp"
app:cardElevation="6dp"
app:layout_constraintTop_toBottomOf="@id/cardMenuCard"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/otherFeaturesCard"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.45">
app:layout_constraintStart_toEndOf="@id/settlementMenuCard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintDimensionRatio="1:0.8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical"
android:padding="12dp"
android:background="@color/white">
android:padding="18dp">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_width="46dp"
android:layout_height="46dp"
android:src="@drawable/ic_signon"
android:layout_margin="6dp"
app:tint="@color/colorPrimary" />
app:tint="@color/colorPrimary"
android:layout_marginBottom="6dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/menu_sign_on"
android:text="@string/menu_sale"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
@ -215,43 +196,44 @@
</androidx.cardview.widget.CardView>
<!-- TRANSACTIONS (Bottom Right) -->
<!-- ===== ROW 2 ===== -->
<!-- Transactions -->
<androidx.cardview.widget.CardView
android:id="@+id/otherFeaturesCard"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="8dp"
app:cardCornerRadius="18dp"
app:cardElevation="4dp"
android:layout_margin="6dp"
android:foreground="?attr/selectableItemBackground"
android:onClick="@{() -> click.onClickTrans()}"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="16dp"
app:cardElevation="6dp"
app:layout_constraintTop_toBottomOf="@id/settlementMenuCard"
app:layout_constraintStart_toEndOf="@id/signOnMenuCard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.45">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/qrPayMenuCard"
app:layout_constraintDimensionRatio="1:0.8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@color/white"
android:orientation="vertical"
android:padding="12dp"
android:background="@color/white">
android:padding="18dp">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_width="46dp"
android:layout_height="46dp"
android:src="@drawable/ic_other_features"
android:layout_margin="6dp"
app:tint="@color/colorPrimary" />
app:tint="@color/colorPrimary"
android:layout_marginBottom="6dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/menu_transactions"
android:text="@string/menu_sale"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:textSize="14sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium"
android:textAlignment="center" />
@ -259,58 +241,52 @@
</androidx.cardview.widget.CardView>
<!-- ============ CENTER CIRCLE BUTTON ============ -->
<!-- QR Pay -->
<androidx.cardview.widget.CardView
android:id="@+id/qrPayMenuCard"
android:layout_width="130dp"
android:layout_height="130dp"
app:cardCornerRadius="130dp"
app:cardBackgroundColor="@color/white"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:layout_width="0dp"
android:layout_height="0dp"
app:cardCornerRadius="18dp"
app:cardElevation="4dp"
android:layout_margin="6dp"
android:foreground="?attr/selectableItemBackground"
android:onClick="@{() -> click.onClickQR()}"
app:cardElevation="12dp"
android:enabled="@{!mainViewModel.kPayStatus}"
android:clickable="@{!mainViewModel.kPayStatus}"
android:focusable="@{!mainViewModel.kPayStatus}"
app:layout_constraintBottom_toBottomOf="@id/signOnMenuCard"
app:disableBtn="@{mainViewModel.kPayStatus}"
app:layout_constraintTop_toBottomOf="@id/signOnMenuCard"
app:layout_constraintStart_toEndOf="@id/otherFeaturesCard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/cardMenuCard"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintVertical_bias="0.5">
app:layout_constraintDimensionRatio="1:0.8">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical"
android:padding="12dp"
android:background="@android:color/transparent"
android:elevation="0dp">
android:padding="18dp">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/ic_qr_pay"
app:tint="@color/colorPrimary"
android:alpha="@{!mainViewModel.kPayStatus ? 1f : 0.4f}" />
<ImageView
android:layout_width="46dp"
android:layout_height="46dp"
android:src="@drawable/ic_qr_pay"
app:tint="@color/colorPrimary"
android:layout_marginBottom="6dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="QR Pay"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium"
android:textAlignment="center"
android:alpha="@{!mainViewModel.kPayStatus ? 1f : 0.4f}" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/menu_sale"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium"
android:textAlignment="center" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -23,66 +23,66 @@
android:background="@color/white">
<!-- SEARCH SECTION -->
<LinearLayout
android:id="@+id/searchSection"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp"
android:visibility="@{manageViewModel.reprintLayoutTopVisibility}"
app:layout_constraintTop_toBottomOf="@id/headerSection"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<!-- <LinearLayout-->
<!-- android:id="@+id/searchSection"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:orientation="horizontal"-->
<!-- android:padding="16dp"-->
<!-- android:visibility="@{manageViewModel.reprintLayoutTopVisibility}"-->
<!-- app:layout_constraintTop_toBottomOf="@id/headerSection"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent">-->
<!-- Search Input Card -->
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="56dp"
android:layout_weight="1"
android:layout_marginEnd="12dp"
app:cardCornerRadius="16dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@color/white">
<!-- &lt;!&ndash; Search Input Card &ndash;&gt;-->
<!-- <androidx.cardview.widget.CardView-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="56dp"-->
<!-- android:layout_weight="1"-->
<!-- android:layout_marginEnd="12dp"-->
<!-- app:cardCornerRadius="16dp"-->
<!-- app:cardElevation="0dp"-->
<!-- app:cardBackgroundColor="@color/white">-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:background="@drawable/bg_edittext_primary_border"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<!-- <LinearLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_margin="2dp"-->
<!-- android:background="@drawable/bg_edittext_primary_border"-->
<!-- android:gravity="center_vertical"-->
<!-- android:orientation="horizontal"-->
<!-- android:padding="16dp">-->
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_txn_history"
app:tint="@color/colorPrimary"
android:alpha="0.6" />
<!-- <ImageView-->
<!-- android:layout_width="20dp"-->
<!-- android:layout_height="20dp"-->
<!-- android:layout_marginEnd="8dp"-->
<!-- android:src="@drawable/ic_txn_history"-->
<!-- app:tint="@color/colorPrimary"-->
<!-- android:alpha="0.6" />-->
<EditText
android:id="@+id/et_rrn_trace"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:hint="@string/txt_search_rrn_trace"
android:text="@={manageViewModel.txtRRNTrace}"
android:textColor="@color/colorPrimary"
android:textColorHint="@color/colorPrimary"
android:alpha="0.6"
android:textSize="15sp"
android:fontFamily="sans-serif"
android:inputType="number"
android:maxLength="12"
android:imeOptions="actionSearch"
android:singleLine="true"
tools:text="" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- <EditText-->
<!-- android:id="@+id/et_rrn_trace"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_weight="1"-->
<!-- android:background="@null"-->
<!-- android:hint="@string/txt_search_rrn_trace"-->
<!-- android:text="@={manageViewModel.txtRRNTrace}"-->
<!-- android:textColor="@color/colorPrimary"-->
<!-- android:textColorHint="@color/colorPrimary"-->
<!-- android:alpha="0.6"-->
<!-- android:textSize="15sp"-->
<!-- android:fontFamily="sans-serif"-->
<!-- android:inputType="number"-->
<!-- android:maxLength="12"-->
<!-- android:imeOptions="actionSearch"-->
<!-- android:singleLine="true"-->
<!-- tools:text="" />-->
<!-- </LinearLayout>-->
<!-- </androidx.cardview.widget.CardView>-->
</LinearLayout>
<!-- </LinearLayout>-->
<!-- RECYCLER VIEW -->
<androidx.recyclerview.widget.RecyclerView
@ -90,8 +90,8 @@
android:layout_width="match_parent"
android:layout_height="0dp"
app:adapter="@{adapter}"
app:layout_constraintTop_toBottomOf="@id/searchSection"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/item_qr_refund" />
<!-- Empty State Section -->

View File

@ -91,7 +91,7 @@
app:layout_constraintBottom_toTopOf="@+id/actionButtonsContainer">
<!-- Card with border -->
<LinearLayout
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dp"
@ -477,13 +477,18 @@
tools:text="12/12/2024 12:12:12" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
</FrameLayout>
<ImageView
android:id="@+id/scroll_hint"
android:layout_width="26dp"
android:layout_height="26dp"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="8dp"
android:src="@drawable/ic_down_arrow"
android:alpha="0.6" />
</androidx.cardview.widget.CardView>
<!-- Action Buttons Container -->

View File

@ -308,7 +308,7 @@
<string name="title_processing">Processing</string>
<string name="enter_trans_id_text">Enter Transaction Id</string>
<string name="title_trans_id">Transaction Id</string>
<string name="title_wave_pay">Wave Pay</string>
<string name="title_wave_pay">MMQR Pay(title)</string>
<string name="title_qr_scan">QR Scan</string>
<string name="txt_wave_pay_description">Please scan here to complete your payment.</string>
<string name="txt_title_papaer_roll">Paper roll not found!</string>