implement home page widgets

This commit is contained in:
2026-05-11 18:27:57 +03:30
parent d2a108f605
commit d1f196e9b6
35 changed files with 2161 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
<?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="#00000000"
android:pathData="M20,12a8,8 0,0 1,-13.7 5.6"
android:strokeColor="#FFFFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="2" />
<path
android:fillColor="#00000000"
android:pathData="M4,12a8,8 0,0 1,13.7 -5.6"
android:strokeColor="#FFFFFFFF"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="2" />
<path
android:fillColor="#FFFFFFFF"
android:pathData="M17,3l3,3l-4,1z" />
<path
android:fillColor="#FFFFFFFF"
android:pathData="M7,21l-3,-3l4,-1z" />
</vector>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="22dp" />
<solid android:color="#F0171C23" />
<stroke
android:width="1dp"
android:color="#3335D38B" />
<padding
android:bottom="12dp"
android:left="12dp"
android:right="12dp"
android:top="12dp" />
</shape>

View File

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

View File

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

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="14dp" />
<solid android:color="#2CFFB84D" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="14dp" />
<solid android:color="#264CC9F0" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="14dp" />
<solid android:color="#2635D38B" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="14dp" />
<solid android:color="#2CFF5A52" />
</shape>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="360dp"
android:height="180dp"
android:viewportWidth="360"
android:viewportHeight="180">
<path android:fillColor="#FF171C23" android:pathData="M0,0h360v180h-360z" />
<path android:fillColor="#FF26313D" android:pathData="M24,24h198v18h-198z" />
<path android:fillColor="#FF35D38B" android:pathData="M24,62h34v34h-34zM64,62h34v34h-34zM104,62h34v34h-34zM144,62h34v34h-34zM184,62h34v34h-34zM224,62h34v34h-34z" />
<path android:fillColor="#FFFFB84D" android:pathData="M264,62h34v34h-34z" />
<path android:fillColor="#FFFF5A52" android:pathData="M304,62h34v34h-34z" />
<path android:fillColor="#2635D38B" android:pathData="M24,118h88v34h-88z" />
<path android:fillColor="#26FFB84D" android:pathData="M136,118h88v34h-88z" />
<path android:fillColor="#26FF5A52" android:pathData="M248,118h88v34h-88z" />
</vector>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="360dp"
android:height="180dp"
android:viewportWidth="360"
android:viewportHeight="180">
<path android:fillColor="#FF171C23" android:pathData="M0,0h360v180h-360z" />
<path android:fillColor="#FF27313D" android:pathData="M24,48h312v2h-312zM24,84h312v2h-312zM24,120h312v2h-312zM24,156h312v2h-312z" />
<path
android:fillColor="#00000000"
android:pathData="M24,138 C72,118 96,130 132,96 C172,58 214,82 248,54 C284,24 304,46 336,32"
android:strokeColor="#FF35D38B"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="6" />
<path
android:fillColor="#00000000"
android:pathData="M24,118 C72,98 102,112 142,84 C182,60 212,92 250,76 C292,58 310,82 336,68"
android:strokeColor="#FF4CC9F0"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="6" />
<path
android:fillColor="#00000000"
android:pathData="M24,152 C66,138 98,144 136,126 C178,108 210,116 250,98 C288,82 312,104 336,92"
android:strokeColor="#FFFFB84D"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="6" />
</vector>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="360dp"
android:height="180dp"
android:viewportWidth="360"
android:viewportHeight="180">
<path android:fillColor="#FF171C23" android:pathData="M0,0h360v180h-360z" />
<path android:fillColor="#26FF5A52" android:pathData="M24,48h82v104h-82z" />
<path android:fillColor="#FFFF5A52" android:pathData="M46,72h38v50h-38z" />
<path android:fillColor="#FF202733" android:pathData="M126,48h210v28h-210zM126,88h210v28h-210zM126,128h210v28h-210z" />
<path android:fillColor="#FFFF5A52" android:pathData="M138,58h22v8h-22z" />
<path android:fillColor="#FFFFB84D" android:pathData="M138,98h22v8h-22z" />
<path android:fillColor="#FF35D38B" android:pathData="M138,138h22v8h-22z" />
</vector>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="360dp"
android:height="180dp"
android:viewportWidth="360"
android:viewportHeight="180">
<path android:fillColor="#FF171C23" android:pathData="M0,0h360v180h-360z" />
<path android:fillColor="#FF4CC9F0" android:pathData="M24,28h96v46h-96z" />
<path android:fillColor="#FF27313D" android:pathData="M24,102h312v2h-312zM24,132h312v2h-312z" />
<path
android:fillColor="#00000000"
android:pathData="M24,142 C64,96 92,128 130,88 C166,50 196,82 226,64 C264,40 292,74 336,36"
android:strokeColor="#FF4CC9F0"
android:strokeLineCap="round"
android:strokeLineJoin="round"
android:strokeWidth="8" />
<path android:fillColor="#2635D38B" android:pathData="M300,24h36v36h-36z" />
</vector>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="360dp"
android:height="180dp"
android:viewportWidth="360"
android:viewportHeight="180">
<path android:fillColor="#FF171C23" android:pathData="M0,0h360v180h-360z" />
<path android:fillColor="#FF35D38B" android:pathData="M24,24h150v24h-150z" />
<path android:fillColor="#FF27313D" android:pathData="M24,68h250v18h-250zM24,100h250v18h-250zM24,132h250v18h-250z" />
<path android:fillColor="#FF35D38B" android:pathData="M24,68h176v18h-176z" />
<path android:fillColor="#FF4CC9F0" android:pathData="M24,100h214v18h-214z" />
<path android:fillColor="#FFFFB84D" android:pathData="M24,132h142v18h-142z" />
<path android:fillColor="#2635D38B" android:pathData="M300,24h36v36h-36z" />
</vector>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="999dp" />
<solid android:color="#FF27313D" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="999dp" />
<solid android:color="#FFFFB84D" />
</shape>
</clip>
</item>
</layer-list>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="999dp" />
<solid android:color="#FF27313D" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="999dp" />
<solid android:color="#FF4CC9F0" />
</shape>
</clip>
</item>
</layer-list>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="999dp" />
<solid android:color="#FF27313D" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="999dp" />
<solid android:color="#FF35D38B" />
</shape>
</clip>
</item>
</layer-list>

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/widget_background"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/widget_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Fleet Pulse"
android:textColor="#FFEAF0F7"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Waiting for samples"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:id="@+id/widget_refresh"
android:layout_width="38dp"
android:layout_height="38dp"
android:background="@drawable/widget_button"
android:contentDescription="@string/widget_refresh"
android:padding="9dp"
android:src="@drawable/ic_widget_refresh"
android:tint="#FF35D38B" />
</LinearLayout>
<TextView
android:id="@+id/widget_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:ellipsize="end"
android:maxLines="1"
android:text="All clear"
android:textColor="#FF35D38B"
android:textSize="24sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/widget_graph"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_marginTop="8dp"
android:contentDescription="@string/widget_fleet_graph"
android:scaleType="fitXY" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_online"
android:layout_width="0dp"
android:layout_height="34dp"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:background="@drawable/widget_panel_green"
android:gravity="center"
android:text="0 OK"
android:textColor="#FF35D38B"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_watch"
android:layout_width="0dp"
android:layout_height="34dp"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:background="@drawable/widget_panel_amber"
android:gravity="center"
android:text="0 WATCH"
android:textColor="#FFFFB84D"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_down"
android:layout_width="0dp"
android:layout_height="34dp"
android:layout_weight="1"
android:background="@drawable/widget_panel_red"
android:gravity="center"
android:text="0 DOWN"
android:textColor="#FFFF5A52"
android:textSize="13sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/widget_priority"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ellipsize="end"
android:maxLines="2"
android:text="No priority servers"
android:textColor="#FFEAF0F7"
android:textSize="12sp" />
</LinearLayout>

View File

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/widget_background"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/widget_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Telemetry Flow"
android:textColor="#FFEAF0F7"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="CPU / MEM / STORAGE"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:id="@+id/widget_refresh"
android:layout_width="38dp"
android:layout_height="38dp"
android:background="@drawable/widget_button"
android:contentDescription="@string/widget_refresh"
android:padding="9dp"
android:src="@drawable/ic_widget_refresh"
android:tint="#FF35D38B" />
</LinearLayout>
<ImageView
android:id="@+id/widget_graph"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:contentDescription="@string/widget_graph_chart"
android:scaleType="fitXY" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_marginTop="6dp"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_cpu"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:background="@drawable/widget_panel_green"
android:gravity="center"
android:text="CPU"
android:textColor="#FF35D38B"
android:textSize="10sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_memory"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:background="@drawable/widget_panel_blue"
android:gravity="center"
android:text="MEM"
android:textColor="#FF4CC9F0"
android:textSize="10sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_disk"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/widget_panel_amber"
android:gravity="center"
android:text="STORAGE"
android:textColor="#FFFFB84D"
android:textSize="10sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/widget_background"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/widget_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Incident Watch"
android:textColor="#FFEAF0F7"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Highest priority first"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:id="@+id/widget_refresh"
android:layout_width="38dp"
android:layout_height="38dp"
android:background="@drawable/widget_button"
android:contentDescription="@string/widget_refresh"
android:padding="9dp"
android:src="@drawable/ic_widget_refresh"
android:tint="#FF35D38B" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="9dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="86dp"
android:layout_height="match_parent"
android:layout_marginEnd="10dp"
android:background="@drawable/widget_panel"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/widget_issue_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="0"
android:textColor="#FFFF5A52"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_issue_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="ISSUES"
android:textColor="#FFFFB5B1"
android:textSize="10sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/widget_issue_one"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@drawable/widget_panel"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingLeft="9dp"
android:paddingRight="9dp"
android:text="No active incidents"
android:textColor="#FFEAF0F7"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_issue_two"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:background="@drawable/widget_panel"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingLeft="9dp"
android:paddingRight="9dp"
android:text="Routes are healthy"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
<TextView
android:id="@+id/widget_issue_three"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@drawable/widget_panel"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingLeft="9dp"
android:paddingRight="9dp"
android:text="Last update --"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/widget_background"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:text="Metric"
android:textColor="#FFEAF0F7"
android:textSize="15sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/widget_refresh"
android:layout_width="38dp"
android:layout_height="38dp"
android:background="@drawable/widget_button"
android:contentDescription="@string/widget_refresh"
android:padding="9dp"
android:src="@drawable/ic_widget_refresh"
android:tint="#FF35D38B" />
</LinearLayout>
<TextView
android:id="@+id/widget_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ellipsize="end"
android:gravity="start"
android:maxLines="1"
android:text="--"
android:textColor="#FF4CC9F0"
android:textSize="36sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/widget_graph"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="4dp"
android:layout_weight="1"
android:contentDescription="@string/widget_metric_graph"
android:scaleType="fitXY" />
<TextView
android:id="@+id/widget_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ellipsize="end"
android:maxLines="2"
android:text="Waiting"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
</LinearLayout>

View File

@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/widget_background"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/widget_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Server"
android:textColor="#FFEAF0F7"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="Waiting"
android:textColor="#FF9AA6B6"
android:textSize="12sp" />
</LinearLayout>
<ImageView
android:id="@+id/widget_refresh"
android:layout_width="38dp"
android:layout_height="38dp"
android:background="@drawable/widget_button"
android:contentDescription="@string/widget_refresh"
android:padding="9dp"
android:src="@drawable/ic_widget_refresh"
android:tint="#FF35D38B" />
</LinearLayout>
<TextView
android:id="@+id/widget_health"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
android:ellipsize="end"
android:maxLines="1"
android:text="ONLINE"
android:textColor="#FF35D38B"
android:textSize="25sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_cpu_label"
android:layout_width="72dp"
android:layout_height="22dp"
android:gravity="center_vertical"
android:text="CPU"
android:textColor="#FF9AA6B6"
android:textSize="11sp"
android:textStyle="bold" />
<ProgressBar
android:id="@+id/widget_cpu_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="22dp"
android:layout_weight="1"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/widget_progress_green" />
<TextView
android:id="@+id/widget_cpu_value"
android:layout_width="48dp"
android:layout_height="22dp"
android:gravity="end|center_vertical"
android:text="--"
android:textColor="#FFEAF0F7"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_memory_label"
android:layout_width="72dp"
android:layout_height="22dp"
android:gravity="center_vertical"
android:text="MEM"
android:textColor="#FF9AA6B6"
android:textSize="11sp"
android:textStyle="bold" />
<ProgressBar
android:id="@+id/widget_memory_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="22dp"
android:layout_weight="1"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/widget_progress_cyan" />
<TextView
android:id="@+id/widget_memory_value"
android:layout_width="48dp"
android:layout_height="22dp"
android:gravity="end|center_vertical"
android:text="--"
android:textColor="#FFEAF0F7"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_disk_label"
android:layout_width="72dp"
android:layout_height="22dp"
android:gravity="center_vertical"
android:text="STORAGE"
android:textColor="#FF9AA6B6"
android:textSize="11sp"
android:textStyle="bold" />
<ProgressBar
android:id="@+id/widget_disk_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="22dp"
android:layout_weight="1"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/widget_progress_amber" />
<TextView
android:id="@+id/widget_disk_value"
android:layout_width="48dp"
android:layout_height="22dp"
android:gravity="end|center_vertical"
android:text="--"
android:textColor="#FFEAF0F7"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="34dp"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/widget_rps"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:background="@drawable/widget_panel"
android:gravity="center"
android:text="RPS --"
android:textColor="#FFEAF0F7"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_p95"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:background="@drawable/widget_panel"
android:gravity="center"
android:text="P95 --"
android:textColor="#FFEAF0F7"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/widget_5xx"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/widget_panel_red"
android:gravity="center"
android:text="5XX --"
android:textColor="#FFFF5A52"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>

View File

@@ -1,3 +1,17 @@
<resources>
<string name="app_name">NGX Monitor</string>
<string name="widget_fleet_label">NGX Fleet Pulse</string>
<string name="widget_server_label">NGX Server Bars</string>
<string name="widget_metric_label">NGX Metric Sparkline</string>
<string name="widget_graph_label">NGX Telemetry Graph</string>
<string name="widget_incidents_label">NGX Incident Watch</string>
<string name="widget_fleet_description">Visual all-server status strip with online, watch, and down groups.</string>
<string name="widget_server_description">One selected server with large health state and CPU, memory, and storage bars.</string>
<string name="widget_metric_description">One focused metric with a large value and history sparkline.</string>
<string name="widget_graph_description">One selected server with CPU, memory, and storage trend lines.</string>
<string name="widget_incidents_description">Fleet incident queue with the highest-priority unreachable or degraded servers.</string>
<string name="widget_refresh">Refresh widget</string>
<string name="widget_fleet_graph">Fleet status strip</string>
<string name="widget_metric_graph">Metric history graph</string>
<string name="widget_graph_chart">Telemetry trend graph</string>
</resources>

View File

@@ -15,4 +15,15 @@
<item name="android:windowBackground">@drawable/splash_screen</item>
<item name="android:windowDisablePreview">false</item>
</style>
<style name="WidgetMetricCell">
<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:background">@drawable/widget_panel</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#FFEAF0F7</item>
<item name="android:textSize">12sp</item>
<item name="android:textStyle">bold</item>
</style>
</resources>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/widget_fleet_description"
android:initialLayout="@layout/widget_fleet"
android:minWidth="250dp"
android:minHeight="140dp"
android:previewImage="@drawable/widget_preview_fleet"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="4"
android:targetCellHeight="2"
android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" />

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="net.rodakot.ngxhttpmonitoringclient.widget.GraphWidgetConfigureActivity"
android:description="@string/widget_graph_description"
android:initialLayout="@layout/widget_graph"
android:minWidth="250dp"
android:minHeight="140dp"
android:previewImage="@drawable/widget_preview_graph"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="4"
android:targetCellHeight="2"
android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" />

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/widget_incidents_description"
android:initialLayout="@layout/widget_incidents"
android:minWidth="250dp"
android:minHeight="140dp"
android:previewImage="@drawable/widget_preview_incidents"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="4"
android:targetCellHeight="2"
android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" />

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="net.rodakot.ngxhttpmonitoringclient.widget.MetricWidgetConfigureActivity"
android:description="@string/widget_metric_description"
android:initialLayout="@layout/widget_metric"
android:minWidth="120dp"
android:minHeight="120dp"
android:previewImage="@drawable/widget_preview_metric"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="2"
android:targetCellHeight="2"
android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" />

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="net.rodakot.ngxhttpmonitoringclient.widget.ServerWidgetConfigureActivity"
android:description="@string/widget_server_description"
android:initialLayout="@layout/widget_server"
android:minWidth="250dp"
android:minHeight="140dp"
android:previewImage="@drawable/widget_preview_server"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="4"
android:targetCellHeight="2"
android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" />