2026-03-06 16:33:54 +00:00
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
|
|
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
|
|
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
|
|
|
android:orientation="vertical"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="match_parent"
|
|
|
|
|
android:background="?android:attr/windowBackground">
|
|
|
|
|
|
|
|
|
|
<!-- Custom Header/Toolbar -->
|
|
|
|
|
<RelativeLayout
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="?android:attr/actionBarSize"
|
|
|
|
|
android:background="#1A1A1A"
|
|
|
|
|
android:padding="8dp">
|
|
|
|
|
|
|
|
|
|
<ImageView
|
|
|
|
|
android:id="@+id/header_icon"
|
|
|
|
|
android:layout_width="32dp"
|
|
|
|
|
android:layout_height="32dp"
|
|
|
|
|
android:layout_centerVertical="true"
|
|
|
|
|
android:src="@mipmap/ic_launcher" />
|
|
|
|
|
|
|
|
|
|
<TextView
|
|
|
|
|
android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:layout_toEndOf="@id/header_icon"
|
|
|
|
|
android:layout_centerVertical="true"
|
|
|
|
|
android:layout_marginStart="12dp"
|
|
|
|
|
android:text="@string/app_name"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:textSize="18sp"
|
|
|
|
|
android:textStyle="bold" />
|
|
|
|
|
|
|
|
|
|
<!-- Triple Toggle Theme ImageButton -->
|
|
|
|
|
<ImageButton
|
|
|
|
|
android:id="@+id/theme_toggle"
|
|
|
|
|
android:layout_width="48dp"
|
|
|
|
|
android:layout_height="48dp"
|
|
|
|
|
android:layout_alignParentEnd="true"
|
|
|
|
|
android:layout_centerVertical="true"
|
|
|
|
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
|
|
|
|
android:src="@drawable/ic_theme_system"
|
|
|
|
|
android:contentDescription="Toggle Theme"
|
|
|
|
|
android:padding="8dp"
|
|
|
|
|
android:scaleType="fitCenter" />
|
|
|
|
|
</RelativeLayout>
|
|
|
|
|
|
|
|
|
|
<ScrollView
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="0dp"
|
|
|
|
|
android:layout_weight="1">
|
|
|
|
|
|
|
|
|
|
<LinearLayout
|
|
|
|
|
android:orientation="vertical"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:padding="16dp">
|
|
|
|
|
|
|
|
|
|
<!-- HR above Watchdog -->
|
|
|
|
|
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="#444444" android:layout_marginBottom="16dp"/>
|
|
|
|
|
|
|
|
|
|
<!-- Watchdog Control Section -->
|
|
|
|
|
<Button
|
|
|
|
|
android:id="@+id/watchdog_control"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="90dp"
|
2026-03-06 18:21:42 +00:00
|
|
|
android:text="@string/watchdog_enable"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textSize="20sp"
|
|
|
|
|
android:textStyle="bold"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:background="@drawable/rounded_button"
|
|
|
|
|
android:backgroundTint="#1976D2"
|
|
|
|
|
android:layout_marginBottom="8dp"
|
|
|
|
|
android:textAllCaps="false"/>
|
|
|
|
|
|
|
|
|
|
<TextView
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-03-07 03:58:43 +00:00
|
|
|
android:text="@string/watchdog_description"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textSize="13sp"
|
|
|
|
|
android:gravity="center"
|
|
|
|
|
android:textColor="?android:attr/textColorSecondary"
|
|
|
|
|
android:layout_marginBottom="16dp"/>
|
|
|
|
|
|
|
|
|
|
<!-- HR below Watchdog -->
|
|
|
|
|
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="#444444" android:layout_marginBottom="20dp"/>
|
|
|
|
|
|
|
|
|
|
<!-- VPN Control Section -->
|
|
|
|
|
<Button
|
|
|
|
|
android:id="@+id/control"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="90dp"
|
|
|
|
|
android:text="@string/control_enable"
|
|
|
|
|
android:textSize="20sp"
|
|
|
|
|
android:textStyle="bold"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:background="@drawable/rounded_button"
|
|
|
|
|
android:backgroundTint="#2E7D32"
|
|
|
|
|
android:textAllCaps="false"/>
|
|
|
|
|
|
|
|
|
|
<TextView
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:text="@string/vpn_description"
|
|
|
|
|
android:textSize="13sp"
|
|
|
|
|
android:gravity="center"
|
|
|
|
|
android:textColor="?android:attr/textColorSecondary"
|
|
|
|
|
android:layout_marginTop="8dp"
|
|
|
|
|
android:layout_marginBottom="12dp"/>
|
|
|
|
|
|
2026-03-13 00:27:38 +00:00
|
|
|
<!-- Local WebView -->
|
|
|
|
|
<Button
|
|
|
|
|
android:id="@+id/btnBrowseContent"
|
|
|
|
|
android:layout_width="match_parent"
|
2026-03-13 03:19:16 +00:00
|
|
|
android:layout_height="90dp"
|
|
|
|
|
android:layout_marginTop="8dp"
|
|
|
|
|
android:layout_marginBottom="12dp"
|
|
|
|
|
android:text="@string/browse_content"
|
|
|
|
|
android:textSize="21sp"
|
|
|
|
|
android:textStyle="bold"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:background="@drawable/rounded_button"
|
|
|
|
|
android:backgroundTint="#F57C00"
|
|
|
|
|
android:textAllCaps="false"
|
|
|
|
|
android:elevation="4dp"
|
2026-03-13 00:27:38 +00:00
|
|
|
android:visibility="gone" />
|
|
|
|
|
|
2026-03-06 16:33:54 +00:00
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/config_label"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-03-13 15:57:43 +00:00
|
|
|
android:text="@string/advanced_settings_label"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textStyle="bold"
|
|
|
|
|
android:padding="12dp"
|
|
|
|
|
android:background="?attr/sectionHeaderBackground"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:clickable="true"
|
|
|
|
|
android:focusable="true"
|
|
|
|
|
android:layout_marginTop="20dp" />
|
|
|
|
|
|
|
|
|
|
<LinearLayout
|
|
|
|
|
android:id="@+id/config_layout"
|
|
|
|
|
android:orientation="vertical"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:visibility="gone"
|
|
|
|
|
android:padding="12dp"
|
|
|
|
|
android:background="?attr/sectionBackground">
|
|
|
|
|
|
2026-03-13 15:57:43 +00:00
|
|
|
<Button
|
|
|
|
|
android:id="@+id/apps"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:text="@string/apps"
|
|
|
|
|
android:layout_marginBottom="12dp"
|
|
|
|
|
android:background="@drawable/rounded_button"
|
2026-03-13 16:28:38 +00:00
|
|
|
android:backgroundTint="#673AB7"
|
2026-03-13 15:57:43 +00:00
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:textAllCaps="false"/>
|
2026-03-06 16:33:54 +00:00
|
|
|
|
2026-03-13 15:57:43 +00:00
|
|
|
<TextView android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:text="@string/dns_ipv4"
|
|
|
|
|
android:textColor="?android:attr/textColorSecondary"
|
|
|
|
|
android:textSize="11sp"/>
|
|
|
|
|
<EditText android:id="@+id/dns_ipv4"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:singleLine="true"
|
|
|
|
|
android:textColor="?android:attr/textColorPrimary"/>
|
|
|
|
|
|
|
|
|
|
<TextView android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:text="@string/dns_ipv6"
|
|
|
|
|
android:textColor="?android:attr/textColorSecondary"
|
|
|
|
|
android:textSize="11sp"/>
|
|
|
|
|
<EditText android:id="@+id/dns_ipv6"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:singleLine="true"
|
|
|
|
|
android:textColor="?android:attr/textColorPrimary"/>
|
|
|
|
|
|
|
|
|
|
<CheckBox
|
|
|
|
|
android:id="@+id/checkbox_maintenance"
|
|
|
|
|
android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:layout_marginTop="8dp"
|
|
|
|
|
android:layout_marginBottom="8dp"
|
|
|
|
|
android:text="Maintenance Mode" />
|
|
|
|
|
|
2026-03-13 16:28:38 +00:00
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/maintenance_warning"
|
|
|
|
|
android:layout_width="wrap_content"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:text="Disable Safe Pocket Web in order to modify"
|
|
|
|
|
android:textSize="11sp"
|
|
|
|
|
android:textStyle="italic"
|
|
|
|
|
android:textColor="#FF9800"
|
|
|
|
|
android:layout_marginBottom="8dp"
|
|
|
|
|
android:visibility="gone" />
|
|
|
|
|
|
2026-03-13 15:57:43 +00:00
|
|
|
<Button android:id="@+id/save"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:text="@string/save"
|
|
|
|
|
android:layout_marginTop="8dp"
|
|
|
|
|
android:background="@drawable/rounded_button"
|
|
|
|
|
android:backgroundTint="#555555"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:textAllCaps="false"/>
|
|
|
|
|
|
|
|
|
|
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/socks_addr" android:textColor="?android:attr/textColorSecondary" android:textSize="12sp" android:visibility="gone"/>
|
|
|
|
|
<EditText android:id="@+id/socks_addr" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:textColor="?android:attr/textColorPrimary" android:visibility="gone"/>
|
|
|
|
|
|
|
|
|
|
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/socks_port" android:textColor="?android:attr/textColorSecondary" android:textSize="12sp" android:visibility="gone"/>
|
|
|
|
|
<EditText android:id="@+id/socks_port" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:inputType="number" android:textColor="?android:attr/textColorPrimary" android:visibility="gone"/>
|
2026-03-06 16:33:54 +00:00
|
|
|
|
|
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/adv_config_label"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-03-07 03:58:43 +00:00
|
|
|
android:text="@string/advanced_settings_label"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textColor="?android:attr/textColorSecondary"
|
|
|
|
|
android:padding="8dp"
|
|
|
|
|
android:textSize="13sp"
|
|
|
|
|
android:clickable="true"
|
2026-03-13 15:57:43 +00:00
|
|
|
android:focusable="true"
|
|
|
|
|
android:visibility="gone"/>
|
2026-03-06 16:33:54 +00:00
|
|
|
|
|
|
|
|
<LinearLayout
|
|
|
|
|
android:id="@+id/advanced_config"
|
|
|
|
|
android:orientation="vertical"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:visibility="gone">
|
|
|
|
|
|
|
|
|
|
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/socks_udp_addr" android:textColor="?android:attr/textColorSecondary" android:textSize="11sp"/>
|
|
|
|
|
<EditText android:id="@+id/socks_udp_addr" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:textColor="?android:attr/textColorPrimary"/>
|
|
|
|
|
|
|
|
|
|
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/socks_user" android:textColor="?android:attr/textColorSecondary" android:textSize="11sp"/>
|
|
|
|
|
<EditText android:id="@+id/socks_user" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:textColor="?android:attr/textColorPrimary"/>
|
|
|
|
|
|
|
|
|
|
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/socks_pass" android:textColor="?android:attr/textColorSecondary" android:textSize="11sp"/>
|
|
|
|
|
<EditText android:id="@+id/socks_pass" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:inputType="textPassword" android:textColor="?android:attr/textColorPrimary"/>
|
|
|
|
|
|
|
|
|
|
<CheckBox android:id="@+id/udp_in_tcp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/udp_in_tcp" android:textColor="?android:attr/textColorSecondary"/>
|
|
|
|
|
<CheckBox android:id="@+id/ipv4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ipv4" android:textColor="?android:attr/textColorSecondary"/>
|
|
|
|
|
<CheckBox android:id="@+id/ipv6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ipv6" android:textColor="?android:attr/textColorSecondary"/>
|
|
|
|
|
</LinearLayout>
|
|
|
|
|
|
|
|
|
|
<LinearLayout
|
|
|
|
|
android:orientation="horizontal"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-03-13 15:57:43 +00:00
|
|
|
android:layout_marginTop="8dp"
|
|
|
|
|
android:visibility="gone">
|
2026-03-06 16:33:54 +00:00
|
|
|
<CheckBox android:id="@+id/remote_dns" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/remote_dns" android:textColor="?android:attr/textColorSecondary"/>
|
|
|
|
|
<CheckBox android:id="@+id/global" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/global" android:textColor="?android:attr/textColorSecondary"/>
|
|
|
|
|
</LinearLayout>
|
|
|
|
|
</LinearLayout>
|
|
|
|
|
|
|
|
|
|
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="#444444" android:layout_marginVertical="20dp"/>
|
|
|
|
|
|
|
|
|
|
<!-- Log Section (Collapsible) -->
|
|
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/log_label"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
2026-03-07 03:58:43 +00:00
|
|
|
android:text="@string/connection_log_label"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textStyle="bold"
|
|
|
|
|
android:padding="10dp"
|
|
|
|
|
android:background="?attr/sectionHeaderBackground"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:clickable="true"
|
|
|
|
|
android:focusable="true"/>
|
|
|
|
|
|
2026-03-07 03:58:43 +00:00
|
|
|
<!-- Log Warnings (Growth rate warning) -->
|
|
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/log_warning_text"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:textColor="#FF9800"
|
|
|
|
|
android:textSize="11sp"
|
|
|
|
|
android:textStyle="italic"
|
|
|
|
|
android:padding="4dp"
|
|
|
|
|
android:visibility="gone"
|
|
|
|
|
android:text="@string/log_warning_rapid_growth" />
|
|
|
|
|
|
|
|
|
|
<!-- Loading Indicator for Logs -->
|
|
|
|
|
<ProgressBar
|
|
|
|
|
android:id="@+id/log_progress"
|
|
|
|
|
style="?android:attr/progressBarStyleHorizontal"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:indeterminate="true"
|
|
|
|
|
android:visibility="gone" />
|
|
|
|
|
|
2026-03-06 16:33:54 +00:00
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/connection_log"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="250dp"
|
|
|
|
|
android:background="#000000"
|
|
|
|
|
android:textColor="#00FF00"
|
|
|
|
|
android:fontFamily="monospace"
|
|
|
|
|
android:padding="8dp"
|
|
|
|
|
android:visibility="gone"
|
|
|
|
|
android:scrollbars="vertical"
|
2026-03-06 18:21:42 +00:00
|
|
|
android:fadeScrollbars="false"
|
|
|
|
|
android:scrollbarSize="10dp"
|
|
|
|
|
android:scrollbarThumbVertical="@drawable/scrollbar_thumb"
|
2026-03-07 03:58:43 +00:00
|
|
|
android:text="@string/system_ready"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textSize="11sp"/>
|
|
|
|
|
|
2026-03-07 03:58:43 +00:00
|
|
|
<!-- Log Size Indicator -->
|
|
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/log_size_text"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:gravity="end"
|
|
|
|
|
android:textColor="?android:attr/textColorSecondary"
|
|
|
|
|
android:textSize="10sp"
|
|
|
|
|
android:paddingEnd="8dp"
|
|
|
|
|
android:visibility="gone"
|
|
|
|
|
android:text="Size: 0KB / 10MB" />
|
|
|
|
|
|
2026-03-06 16:33:54 +00:00
|
|
|
<!-- Log Actions Bar -->
|
|
|
|
|
<LinearLayout
|
|
|
|
|
android:id="@+id/log_actions"
|
|
|
|
|
android:orientation="horizontal"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:visibility="gone"
|
|
|
|
|
android:layout_marginTop="4dp">
|
|
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
android:id="@+id/btn_clear_log"
|
|
|
|
|
android:layout_width="0dp"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:layout_weight="1"
|
2026-03-07 03:58:43 +00:00
|
|
|
android:text="@string/reset_log"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textSize="12sp"
|
|
|
|
|
android:backgroundTint="#D32F2F"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:textAllCaps="false"
|
|
|
|
|
android:layout_marginEnd="4dp"/>
|
|
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
android:id="@+id/btn_copy_log"
|
|
|
|
|
android:layout_width="0dp"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:layout_weight="1"
|
2026-03-07 03:58:43 +00:00
|
|
|
android:text="@string/copy_all"
|
2026-03-06 16:33:54 +00:00
|
|
|
android:textSize="12sp"
|
|
|
|
|
android:backgroundTint="#388E3C"
|
|
|
|
|
android:textColor="#FFFFFF"
|
|
|
|
|
android:textAllCaps="false"
|
|
|
|
|
android:layout_marginStart="4dp"/>
|
|
|
|
|
</LinearLayout>
|
|
|
|
|
|
|
|
|
|
<!-- Version Footer -->
|
|
|
|
|
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="#444444" android:layout_marginTop="32dp" android:layout_marginBottom="8dp"/>
|
|
|
|
|
<TextView
|
|
|
|
|
android:id="@+id/version_text"
|
|
|
|
|
android:layout_width="match_parent"
|
|
|
|
|
android:layout_height="wrap_content"
|
|
|
|
|
android:gravity="center"
|
|
|
|
|
android:text="v0.1.17alpha"
|
|
|
|
|
android:textColor="#888888"
|
|
|
|
|
android:textSize="10sp"
|
|
|
|
|
android:paddingBottom="16dp"/>
|
|
|
|
|
|
|
|
|
|
</LinearLayout>
|
|
|
|
|
</ScrollView>
|
|
|
|
|
</LinearLayout>
|